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!

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top