|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2001
Messaggi: 111
|
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 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Credo che ci siano tecniche più eleganti, ma specificare da quale "ramo" viene la funzione chiamata funziona:
Codice:
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;
}
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#3 | |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Re: ereditarietà multipla in C++
Quote:
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: Codice:
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;
}
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Beh...a quel punto puoi anche chiamare direttamente d.foo();
|
|
|
|
|
|
#5 |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
ops.. hai ragione, dimenticavo che il metodo non e' stato ridefinito.
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Apr 2001
Messaggi: 111
|
Grazie mille sono riuscito a risolvere il tutto!!!
ciao e alla prossima eh eh |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:39.



















