【发布时间】:2011-12-01 22:04:57
【问题描述】:
我在基类和派生类中都有一个方法。当我在派生类中的对象上调用此方法时,它调用基类方法而不是派生类方法。这是我的代码:
人.h
class Person
{
...
public:
...
virtual void coutPerson();
};
Person.cpp
void Person::coutPerson() {
cout << name << endl;
birthday.coutDate();
phoneNumber.coutPhoneNumber();
cout << city << ", " << state << endl;
}
学生.h
class Student : public Person
{
...
public:
...
virtual void coutPerson();
};
学生.cpp
void Student::coutPerson() {
cout << "DEBUG: Student::coutPerson()" << endl;
//Person::coutPerson();
cout << "Dorm Room: " << this->dorm << " " << this->dormRoom << endl;
}
对象创建于:addPerson<Student>(personVector);
创建对象时,它被创建为学生,因为它调用学生构造函数。
方法调用于:personVector[num-1].coutPerson();
Student 对象是被告知 coutPerson 的对象,因为它显示了我在创建 Student 对象时提供的信息。
template<typename T> void addPerson(vector<Person> &personVector) {
T p;
personVector.push_back(p);
}
当在 Student 对象上调用 coutPerson() 方法时,它只会计算姓名、生日、电话号码以及城市和州。这段代码有什么问题?它应该调用 Student coutMethod...
谢谢!
【问题讨论】:
-
呼叫站点在哪里?调用站点使用什么语法?
-
确保您是通过指针或引用调用方法,而不是通过实际对象,除非对象的类型为
Student,不是类型为@987654329 @ -
能否请您出示调用
coutPerson()的代码?我很确定问题就在那里。 -
addPerson是什么?personVector是什么? -
调用 coutPerson 的代码可能不是问题。我创建了一个名为 studentName 的 Student,等等......它会输出“studentName”等......没有其他学生特定的值。
标签: c++ inheritance virtual