【发布时间】:2018-01-15 23:42:04
【问题描述】:
我有以下三个课程:
class A
{
private:
std::string device;
public:
std::string getDeviceType() { return device; };
void setDeviceType(std::string device) { device = device; };
virtual void doSomething() = 0;
virtual void doSomething2() = 0;
};
class B: public A
{
private:
public:
B(){ ; };
virtual ~B(){ ; };
void doSomething() { std::cout << "I am usual B" << std::endl; };
void virtual doSomething2() { std::cout << "I am usual B" << std::endl; };
};
class C : public B
{
private:
public:
C(){ ; };
~C(){ ; };
void doSomething() { std::cout << "I am C" << std::endl; };
void doSomething2() { std::cout << "I am C" << std::endl; };
};
主要:
B *myHandler = new C();
myHandler->doSomething();
myHandler->doSomething2();
但输出不如预期,我的预期输出是I am usual B,然后是I am C,因为doSomething() 是B 类的非虚拟成员。但真正的输出是I am C,然后是I am C。你知道为什么吗?
【问题讨论】:
-
[OT]
{ device = device; }应该是{ this->device = device; },或者使用不同的名称。 -
被覆盖的方法保持虚拟;由于
A::doSomething是,B::doSomething和C::doSomething也是,不管关键字virtual在声明中是否重复。
标签: c++ inheritance polymorphism virtual-functions