2017-02-15 11 views
4

В моем файле на C++, когда я запускаю визуальную студию, мой вывод не то, что я думал, что это не так, я не знаю, где я испортился. В основном у меня есть класс Person и Student, а класс ученика наследуется от класса Person, а когда создается объект obj, он вызывает класс Person для инициализации общих переменных.Вызов функции суперкласса наследования 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; 

} 

Мой выход I am a person. -858993460 Почему это?

ответ

3

Способ, которым вы вызываете конструктор суперкласса, неверен. Это, как вы должны это сделать:

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

Обратите внимание, что, когда вы кладете Person(_name, _age); внутри тела, это не имеет никакого эффекта, кроме как построить временный Person объект. С другой стороны, правильный путь выше ссылок на «встроенный» Person, который будет построен с этими параметрами.

0

Ваш конструктор конструктора Student неверен для построения его суперкласса. Должно быть:

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