2017-07-08 4 views
-2

Anmerkungen: 1) Person ist die Basisklasse von Student 2) Person enthält Name als einzige Datenvariable 3) Student enthält Gesellschaft. Die Gesellschaft fungiert als Hinweis auf eine Textzeichenfolge, die den Namen des Klubs des Schülers enthält.Wie kann eine Speicheradresse (Zeigervariablen) mit Konstruktor initialisiert werden?

Ich habe Schwierigkeiten in der vierten Zeile zu verstehen:

int main(){ 
Person* p1; 
p1=new Student("John", "Drama Society"); //This line 
delete p1; 
} 

ist keine Person Zeiger auf eine Speicheradresse in dem Heap p1? Soweit ich weiß, ist die Zeigervariable nur ein 32-Bit- oder 64-Bit- (systemabhängiger) Speicherplatz im Speicher. Wie kann es genau wie Objekte vom Typ Person initialisiert werden?

Ich weiß, dass mein Konzept falsch ist, dass ich sie bitte helfen herauszufinden :(

+0

Ergebnis neuer ein Zeiger ist. Zeiger auf Person kann mit Zeiger auf Schüler initialisiert werden. Was ist deine Frage? – Yunnosch

Antwort

2

Was passiert ist, dass der Aufruf von new einen auf dem Heap Student Objekt zuordnet und dann gibt einen Zeiger auf sie. Dann ordnen Sie dass Zeiger auf p1. So p1 zeigen nun auf ein Student Objekt auf dem Heap.

der Konstruktoraufruf nach new Syntax, wie C++ ist für new funktioniert. Das Konstruktor wird verwendet werden, um das Objekt auf dem Heap zu initialisieren.

+0

Vielen Dank! Ich verstehe jetzt – Yin

0

Sie fragen nach Polymorphie. Sie müssen zwischen statischem und dynamischem Typ unterscheiden. Der statische Typ eines Zeigers wird bei der Deklaration angegeben. In diesem Fall ist der statische Typ von p1 Person. Der dynamische Typ kann ein beliebiger Nachfolger des statischen Typs sein und kann zur Laufzeit definiert werden, in diesem Beispiel Student.

Sie können eine große Erklärung finden Sie hier: https://stackoverflow.com/a/7649711/8244162

+0

Vielen Dank für Ihre Informationen! – Yin

Verwandte Themen