View Full Version : ereditarietà multipla in C++
Una classe D eredita da due classi B e C le quali ereditano a loro volta da una classe A. (ci siamo?!?scusate)
Nel main ho un oggetto di classe D sul quale voglio chiamare un metodo di A (non ridefinito da nessuna delle classi figlie di A)
Il compilatore dava errore
Ho allora ridefinito in D il metodo in modo tale che richiamasse lo stesso metodo da B
B::met();
Il compilatore dà ancora errore (non funziona nemmeno se richiamo il metodo direttamente dalla classe A)
Grazie mille
10q
ilsensine
22-10-2002, 16:18
Credo che ci siano tecniche più eleganti, ma specificare da quale "ramo" viene la funzione chiamata funziona:
class A {
public:
void foo() { cerr << "ciao" << endl; }
};
class B: public A {
};
class C: public A {
};
class D: public B, public C {
};
int main() {
D d;
d.B::foo();
return 0;
}
/\/\@®¢Ø
22-10-2002, 21:02
Originariamente inviato da opiu
[B]
Nel main ho un oggetto di classe D sul quale voglio chiamare un metodo di A (non ridefinito da nessuna delle classi figlie di A)
Il compilatore dava errore
Nella classe D, la classe base A compare due volte: una volta come 'padre' di B, l'altra come padre di C.
Devi quindi specificare quale dei due usare. Un modo e' fare come ha spiegato ilsensine.
Attento pero' che anche i dati della classe A sono raddoppiati, le due classi sono effettivamente distinte !
PEr avere una classe base unica devi cambiare leggermente le definizioni delle classi:
class A {
public:
void foo() { cerr << "ciao" << endl; }
};
class B: [b]virtual[/b] public A {
};
class C: [b]virtual[/b] public A {
};
class D: public B, public C {
};
int main() {
D d;
d.[b]A[/b]::foo();
return 0;
}
Con l'aggiunta di virtual prima di public (in tutte le classi interessate) ottieni un'unica classe base e ora puoi usare la forma A::foo()
Beh...a quel punto puoi anche chiamare direttamente d.foo();
/\/\@®¢Ø
23-10-2002, 11:18
ops.. hai ragione, dimenticavo che il metodo non e' stato ridefinito.
Grazie mille sono riuscito a risolvere il tutto!!!
ciao e alla prossima eh eh
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.