2017-02-15 4 views
4

In meiner C++ - Datei, wenn ich es Visual Studio, meine Ausgabe ist nicht, was ich dachte, es war ein Ich weiß nicht, wo ich vermasselt. Grundsätzlich habe ich eine Person und eine Student Klasse, und die Student-Klasse erbt von der Person-Klasse, und wenn das Student-Obj erstellt wird, ruft es die Person-Klasse, um gemeinsame Variablen zu initialisieren.Aufruf der Superklasse Funktion Vererbung C++

class Person { 
public: 
    Person() { 

    } 
    Person(string _name, int _age) { 
     name = _name; 
     age = _age; 
    } 

    void say_stuff() { 
     cout << "I am a person. " << name << age << endl; 
    } 

private: 
    string name; 
    int age; 
}; 

class Student : public Person { 
public: 
    Student(string _name, int _age, int _id, string _school) { 
     Person(_name, _age); 
     id = _id; 
     school = _school; 
    } 

private: 
    string name; 
    int age; 
    int id; 
    string school; 

}; 



int main() { 


    Student s1("john", 20, 123, "AAAA"); 
    s1.say_stuff(); 

    system("pause"); 
    return 0; 

} 

Meine Ausgabe ist I am a person. -858993460 Warum ist das?

Antwort

3

Die Art und Weise Sie den Konstruktor der Superklasse aufrufen, falsch ist. Dies ist, wie Sie es tun sollen:

Student(string _name, int _age, int _id, string _school) : Person(_name, _age) { 
    id = _id; 
    school = _school; 
} 

Beachten Sie, dass, wenn Sie Person(_name, _age); im Innern des Körpers gelegt, es hat keine Wirkung, sondern ein temporäres Person Objekt zu konstruieren. Auf der anderen Seite bezieht sich der korrekte Weg oben auf den "eingebetteten" Person, der mit diesen Parametern konstruiert wird.

0

Ihre Student Konstruktorsyntax ist falsch, um die Superklasse zu konstruieren. Es sollte sein:

Student(string _name, int _age, int _id, string _school) 
     : Person(_name, _age) { 
Verwandte Themen