Elenchi eterogenei, funzioni virtuali e dati membri
-
20-12-2019 - |
Domanda
Sto avendo problemi a capire come assegnare valori ai dati membri quando chiami una funzione virtuale attraverso un'elenco eterogeneo.
Ecco un esempio di cosa sto cercando di fare:
class A
{
protected:
virtual void func1();
private:
A * list;
}
class B: public A
{
protected:
void func1();
private:
int i1, i2;
}
.
all'interno ():
list = new A[10];
list[0] = new B;
list[0]->Func1();
.
Dichiarazione di FUNC1 ():
void B::Func1()
{
int a, b;
cin >> a >> b;
list[0]->i1 = a;
list[0]->i2 = b;
// or can I just do this:
// i1 = a;
// i2 = b;
}
.
Sto cercando il modo appropriato per accedere ai dati dei membri di una classe derivata in una funzione della classe derivata se si chiama tramite un puntatore della classe genitore dal principale.Qualsiasi aiuto sarebbe molto apprezzato!
Soluzione
Durante l'esecuzione di una funzione virtual
ora che il tipo dell'oggetto è il tipo di classe che la funzione è definita in o una classe derivata dalla classe.Cioè, nella tua funzione B::func1()
conosci i punti this
su un oggetto B
.L'oggetto può essere di un tipo derivato daB
ma hai ancora tutto il presente in B
.
D'altra parte, non conosciuto staticamente che list[0]
punta all'oggetto B
.Il codice che non hai compmentato nel tuo codice non funziona.Il codice commentato sembra OK