Heterogene Listen, virtuelle Funktionen und Mitgliedsdaten
-
20-12-2019 - |
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!
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