我希望从下面的 vector 中输出每个对象的内容。
vector<Employees*> midzer;
我找到的“解决方案”是通过执行以下操作:
for (vector<Employees*>::iterator i = midzer.begin(); i != midzer.end(); ++i)
{
cout <<
(*i)->getFirstName() << " " << // Base class method.
(*i)->getLastName() << "\n" << // Base class method.
(*i)->getSalary() << "\n" << // Base class method.
(*i)->getNumMeetings() << "\n" << // Derived class method.
(*i)->getNumVacationDays() << endl; //Derived class method.
}
问题是我收到一条错误消息,指出 getNumMeetings 和 getNumVacationDays 不是 Employees(基类)的成员。
谁能详细说明为什么迭代器不能“看到”派生方法,并在可能的情况下提供解决方案?
任务是创建一个员工“数据库”,具有动态创建和删除不同类型员工的功能,并以良好的格式输出整个数据库。
附加信息:
- 我只能创建一个 vector 。
- 我必须创建一个基类和三个派生类(经理、工程师和研究员)。
/肯尼思
最佳答案
您无法看到基类成员,因为它们不在那里。您必须转换为派生类型才能使用它们的成员:
dynamic_cast<Manager*>(*i)->getNumMeetings() << "\n" <<
但更好(更面向对象)的方法是使用类层次结构来解决问题——在基类中放置一个虚拟 write 方法,然后在派生类中专门化它。
关于c++ - 迭代器不能访问派生类的成员方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20541036/