【发布时间】:2018-01-03 17:14:54
【问题描述】:
我正在尝试通过两个类从一个公共父类继承某些成员来实现几个共享很多属性的类。实际上,改变的是它们处理特定成员的方式,这也将被继承,因为它需要从父类的其他成员那里获得:
#include <iostream>
class Parent{
public:
Parent();
Parent(const int _arg);
~Parent();
int member1(const std::vector<float> _args);
int member2(const std::vector<float> _args) { std::cout << shared(0.0) << std::endl;};
int member3(const std::vector<float> _args);
float shared(const float _val) {return 0.0;}; //dummy call in order for code to be compilable
protected:
int protected_member1;
int protected_member2;
int protected_member3;
};
class Child1 : public Parent {
public:
Child1(const int _arg):Parent(_arg);
~Child1();
float shared(const float _val) {return 2.1;};
}
class Child2 : public Parent {
public:
Child2(const int _arg):Parent(_arg);
~Child2();
float shared(const float _val) {return 1.7;};
}
在实践中,shared(const float _val) 做了更复杂和特定问题的事情,我试图简化代码以便更清楚地说明问题(并删除了代码中不相关的部分作为其余类成员的定义)。但是,当我从每个子类调用 member2(const std::vector<float> _args) 时,调用的是基类成员 shared(const float _val) 而不是子成员。
int main(int argc, char const *argv[]){
Parent p;
Child1 c1;
Child2 c2;
c1.member2(std::vector<float> (5,1.0));
c2.member2(std::vector<float> (5,1.0));
return 0;
}
我做错了什么?解决问题的不同方法是否更有意义?
【问题讨论】:
-
shared没有标记为virtual,那你为什么指望它参与虚拟调度呢?
标签: c++ class inheritance