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

标签 c++

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

相关文章:

c++ - 批量构建在 Visual Studio 2017 中不执行任何操作

c++ - VS2013中转换运算符错误C2678,在VS2008中有效

使用L1 CPU Cache的c++算法的Python实现

c++ - Qt APP样式表问题

c++ - 人们需要什么来运行我的应用程序?

c++ - Qt 资源系统中文件的最后修改日期

C++ 模板显式右值类型

c++ 只继承公共(public)构造函数

c++ - 使用 _bstr_t 时无效的空指针

带有智能指针的 C++ 访问者模式