【发布时间】:2020-05-07 10:04:51
【问题描述】:
关于这个主题有很多问题,但是,我没有找到以下问题的解决方案:
我有以下课程:
1) 纯虚类
class Employee {
private:
vector<Employee> vec_employee;
public:
Employee() {};
virtual ~Employee() {};
virtual void set_vec_subordinate(vector<Employee> vec_employee) = 0;
};
2) 派生类
class Worker : Employee{ private: public: };
3) 另一个派生类,它应该覆盖来自 Employee 的纯虚方法
class Manager : Employee {
private:
public:
inline void set_vec_subordinate(vector<Worker> vec_employee) override { this->set_vec_subordinate(vec_employee); };
};
我试图实现的是覆盖纯虚方法,但使用“不同”参数。所以对 C++ 来说还是新手,但我认为应该有办法这样做,特别是因为 另一个参数来自 Worker 类型,它是 Employee 的派生类。
【问题讨论】:
-
即使 C++ 允许逆变并将其应用于向量,您的方法也不是逆变变。你不会支持
vector<Manager>(而Employee会)。 -
C++ 仅支持来自指针/引用的返回类型的协变。 (我们不能添加协方差关系(例如智能指针))。
-
术语:具有一个或多个纯虚函数的类是抽象类。没有“纯虚拟类”这样的东西。
标签: c++ overriding derived