gpt4 book ai didi

c++ - 迭代器不能访问派生类的成员方法

转载 作者:行者123 更新时间:2023-11-28 03:02:05 25 4
gpt4 key购买 nike

我希望从下面的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com