Frage

Ich habe einige Probleme herauszufinden, wie Mitgliedsdaten Werte zugewiesen werden, wenn eine virtuelle Funktion über eine heterogene Liste aufgerufen wird.

Hier ist ein Beispiel dafür, was ich versuche zu tun:

class A
{
 protected:
 virtual void func1();

 private:
 A * list;
}

class B: public A
{
 protected:
 void func1();

 private:
 int i1, i2;
}

Innerhalb von main():

list = new A[10];

list[0] = new B;

list[0]->Func1();

Deklaration von 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;
}

Ich suche nach der geeigneten Möglichkeit, auf Mitgliedsdaten einer abgeleiteten Klasse innerhalb einer Funktion der abgeleiteten Klasse zuzugreifen, wenn ich über einen Zeiger der übergeordneten Klasse von main aufrufe.Jede Hilfe wäre sehr dankbar!

War es hilfreich?

Lösung

Während der Ausführung eines virtual funktion Sie jetzt, dass der Typ des Objekts der Typ der Klasse ist, in der die Funktion definiert ist, oder eine davon abgeleitete Klasse.Das heißt, in Ihrem B::func1() funktion, die Sie kennen this zeigt auf a B Objekt.Das Objekt kann von einem Typ sein, der abgeleitet ist vonB aber du hast immer noch alles in dir B.

Auf der anderen Seite, Sie nicht wisse statisch, dass list[0] zeigt auf B Objekt.Der Code, den Sie in Ihrem Code auskommentiert haben, funktioniert nicht.Der kommentierte Code sieht in Ordnung aus

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top