vendettaaaaa
26-01-2012, 20:02
Ciao,
tanto per disobbedire a !fazz :D stavo giochicchiando con le classi...e ho incontrato un errore in compilazione.
Ho due classi: una per definire un punto, che ha come membri private double x e double y:
class Point
{
public :
Point();
Point(double, double);
double GetX();
double GetY();
void SetPos(double, double);
double Distance(Point*);
~Point();
private :
double x;
double y;
};
la funzione Distance(Point*) calcola la distanza tra l'oggetto istanziato ed un altro oggetto della stessa classe Point:
double Point::Distance(Point* other) {
double dx = x - other->x;
double dy = y - other->y;
return sqrt(dx * dx + dy * dy);
}
E così funziona; other è un puntatore ad un oggetto di classe Point, quindi per accedere ai suoi membri x e y uso l'operatore ->, ovvero (*other).
Prima domanda: è normale che possa accedere direttamente ad x e y anche se sono private, indipendentemente se voglio scrivere o leggere tali variabili?
Ora, ho fatto una classe Circle che viene costruita con 2 parametri: un Point* e un double (il raggio):
class Circle
{
public:
Circle();
Circle(Point*, double);
~Circle();
void SetCircle(Point*, double);
Point* GetCenter();
double GetRadius();
double Area();
double Perimeter();
private:
double radius;
Point* center;
};
Circle::Circle(Point* point, double r)
{
this->radius = r;
center = new Point(point -> GetX(), point->y);
}
perchè l'operazione in rosso mi da "error: y is inaccessible" se in Distance potevo farlo? Ho cercato su cplusplus.com e company ma non ho trovato nulla.
Dopo aver scritto il messaggio m'è venuto in mente che forse in Distance posso perchè quella funzione è all'interno della classe Point, e other appartiene a quella classe, mentre il costruttore di Circle è una classe a sè stante, può essere?
tanto per disobbedire a !fazz :D stavo giochicchiando con le classi...e ho incontrato un errore in compilazione.
Ho due classi: una per definire un punto, che ha come membri private double x e double y:
class Point
{
public :
Point();
Point(double, double);
double GetX();
double GetY();
void SetPos(double, double);
double Distance(Point*);
~Point();
private :
double x;
double y;
};
la funzione Distance(Point*) calcola la distanza tra l'oggetto istanziato ed un altro oggetto della stessa classe Point:
double Point::Distance(Point* other) {
double dx = x - other->x;
double dy = y - other->y;
return sqrt(dx * dx + dy * dy);
}
E così funziona; other è un puntatore ad un oggetto di classe Point, quindi per accedere ai suoi membri x e y uso l'operatore ->, ovvero (*other).
Prima domanda: è normale che possa accedere direttamente ad x e y anche se sono private, indipendentemente se voglio scrivere o leggere tali variabili?
Ora, ho fatto una classe Circle che viene costruita con 2 parametri: un Point* e un double (il raggio):
class Circle
{
public:
Circle();
Circle(Point*, double);
~Circle();
void SetCircle(Point*, double);
Point* GetCenter();
double GetRadius();
double Area();
double Perimeter();
private:
double radius;
Point* center;
};
Circle::Circle(Point* point, double r)
{
this->radius = r;
center = new Point(point -> GetX(), point->y);
}
perchè l'operazione in rosso mi da "error: y is inaccessible" se in Distance potevo farlo? Ho cercato su cplusplus.com e company ma non ho trovato nulla.
Dopo aver scritto il messaggio m'è venuto in mente che forse in Distance posso perchè quella funzione è all'interno della classe Point, e other appartiene a quella classe, mentre il costruttore di Circle è una classe a sè stante, può essere?