|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 39
|
Ereditarietà e costruttori in C++
...Un grande saluto a tutti gli utenti del forum...qualcuno potrebbe darmi qualche spiegazione sul come ereditare i costruttori da una classe base?
...praticamente devo creare una nuova classe (vector) che erediti la classe point e quindi : class vector : public point{.....quello che non riesco a capire e su come ereditare i costruttori...dato che l'inizializzazione dovrà essere uguale a quella fatta dalla classe base...non riesco a capire #include <math.h> #include <iostream.h> class point{ private: //dichiarazione oggetti coordinate double _x,_y,_z; int dim; public: //inizializzazione oggetti mediante point point(){ _x = 0; _y = 0; _z = 0; } //funzione crea punto 3D point (const double x, const double y, const double z) { _x = x; _y = y; _z = z; dim = 3; } //metodi //funzioni inline //ritorna la coordinata _x double getx () { return _x; } //ritorna la coordinata _y double gety() { return _y; } //ritorna la coordinata _z double getz() { return _z; } int getdim() { return dim; } //funzioni assegna valori coordinata void setx(const double val) { _x = val; } void sety (const double val) { _y = val; } void setz (const double val) { _z = val; } void setdim (const int val) { dim = val; } }; //definizione classe derivata vettore di tipo public class vector : public point{ ................ public: }; |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4739
|
Codice:
class point
{
private:
double _x,_y,_z;
//la dim_ensione dell' array e' superflua tra i dati membro di point, di cui
//occorrono tutte e solo le coordinate, e i metodi per gestirle
public:
void point();
void point(double, double, double);
void -point() //distruttore: attenzione il - e' una tilde ma non la trovavo ora come ora
//l' utilita' di una classe e' accorpare i metodi con i dati interni
double getx();
void setx(double x);
double gety();
void sety(double x);
double getz ();
void setz(double x);
}
point::point(){
_x = 0;
_y = 0;
_z = 0;
} ;
point::point(const double x, const double y, const double z)
{
_x = x;
_y = y;
_z = z;
} ;
//get e set implementate anche per y e z
double point::getx()
{
return _x:
};
void point::setx(double x)
{
_x=x;
};
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate
Ultima modifica di jappilas : 16-11-2005 alle 19:12. |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 39
|
....
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4739
|
Quote:
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate
Ultima modifica di jappilas : 16-11-2005 alle 19:22. |
|
|
|
|
|
|
#5 | |
|
Member
Iscritto dal: Sep 2005
Messaggi: 39
|
Quote:
|
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4739
|
Quote:
Codice:
class a
{
private:
int dato;
public:
void a(int a) : dato(a){}
}
class b:public a
{
private:
int dato2;
public:
void b(int n1,n2) : a(n1), dato2(n2) {}
}
quello che dicevo prima è che che in questo caso mi pareva perdessi di vista il senso dell' ereditarieta', che consiste nell' estendere una classe base : ereditare da una classe base implica che un oggetto di tipo derivato è anche del tipo base tu vuoi creare un vettore come derivato da point... ma un vettore sarà un contenitore per piu' elementi di tipo point (*), non un point a sua volta: per questo dicevo in questo caso non andrebbe applicata l' ereditarietà, ma la semplice scrittura di due classi diverse, di cui la seconda ha come dati membro oggetti il cui tipo è la prima classe (*) a meno che non intendi il vettore nel senso della geometria analitica, definito da una n-pla di grandezze riferite a una base ortonormale di coordinate e corrispondente ognuna ad uno di n versori nella fattispecie, un vettore non contiene più punti , ma ha la stessa struttura della classe punto, quindi anche in questo caso l' ereditarietà non c' entra
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate
Ultima modifica di jappilas : 17-11-2005 alle 00:29. |
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 39
|
è giusto scrivere così....
//definizione classe derivata vettore di tipo public class vector : public point{ private: double x1,y1,z1; public: vector() : point(){ x1 = 0; y1 = 0; z1 = 0; } }; |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Volendo fare i pignoli: Codice:
vector()
: point()
, x1(0.0)
, y1(0.0)
, x1(0.0)
{
}
Perche' vuoi ereditare vector da point? Un vettore non e' un punto, il principio di sostituzione non si applica in questo caso, quindi usare l'ereditarieta' e' un errore di design. L'ereditarieta' non dev'essere (quasi) mai uno strumento per riutilizzare il codice, ma uno strumento per modellare le entita' che partecipano al design. Quindi, un vettore e' composto da due punti. Ecco come puoi modellare questa relazione in codice: Codice:
class Vector3D
{
public:
Vector3D()
: m_Point0()
, m_Point1()
{
}
private:
Point3D m_Point0;
Point3D m_Point1;
};
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:39.



















