Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965

    [C++] Non riesco ad utilizzare la classe

    Points.h
    codice:
    class Points{
    	public:
    			void setX(int);
    			void setY(int);
    			void setZ(int);
    			void setOrtogonal(int,int);
    			void setCartesian(int,int,int);
    	private:
    			int x;
    			int y;
    			int z;
    
    };
    Points_main.cpp
    codice:
    #include <iostream>
    #include "Points.h"
    using namespace std;
    
    void Points::setX(int a){
    	x = a;
    }
    void Points::setY(int a){
    	y = a;
    }
    void Points::setZ(int a){
    	z = a;
    }
    void Points::setOrtogonal(int a, int b){
    	setX(a);
    	setY(b);
    }
    void Points::setCartesian(int a, int b, int c){
    	setX(a);
    	setY(b);
    	setZ(c);
    }
    
    int main(){
    
    	Points* p;
    	p = new Points();
    
    	p->setOrtogonal(5,10);
    
    	cout << "x = " << p.x << endl;
    	cout << "y = " << p.y << endl;
    
    	return 0;
    }
    Errori:
    C:\Points_main.cpp(31) : error C2228: left of '.x' must have class/struct/union type
    C:\Points_main.cpp(32) : error C2228: left of '.y' must have class/struct/union type

    Sinceramente non ho capito l'uso del puntatore per la classe, per ho utilizzato la sintassi di
    http://programmazione.html.it/cplusp...lusplus_34.htm

    Tra l'altro ho fatto diverse prove. Damn, alla prima compilazione dei programmi c++ ho sempre errori su errori; questo perchè non ci ho mai programmato, seppur ho letto molto.

    Vabbè, help

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965
    Utilizzando la notazione

    p->x

    funge ( però dovrei spostare x e y nell'interfaccia pubblica )

    Quindi risolvo migliorando il dannato incapsulamento fornendo i metodi per l'output.

    A posto.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965
    A questo punto.

    Cosa cambia, quali sono i vantaggi/svantaggi nel fare

    Classe obj;
    obj.fun();

    o

    Classe* obj;
    obj = new Classe(); // questo è necessario?
    obj->fun();

    ???????????????????

    Crei in ogni caso una istanza della classe?


    Inoltre, perchè non posso fare questo
    codice:
    void Points::setX(int x){
    	this.x = x;
    }
    ????

  4. #4
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Classe obj;
    obj.fun();

    o

    Classe* obj;
    obj = new Classe(); // questo è necessario?
    obj->fun();
    E' come fare:

    int a;

    al posto di

    int* a = new int;

    Nel primo caso hai una variabile normale, nel secondoa caso un puntatore.
    Cmq si, crei in ogni caso una nuova istanza.

    noltre, perchè non posso fare questo

    code:
    void Points::setX(int x){
    this.x = x;
    }
    essendo this un puntatore - all'istanza attuale - devi usare -> per accedere ai suoi membri: this->x = x;

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965
    Ah giusto!

    Grazie


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.