我有一个基类A
和一些派生类B
,C
和D
,它们都有一个方法DoSomething()
,它是虚拟的在基类方法中(它在所有子类和基类中实现)。
我有一个问题,派生类B使用基类A中的方法。这可能是设计不良的结果,但我没有看到问题,因为实现非常简单。
以下
中创建的B类对象A* a = new B();
如果我为此对象调用方法DoSomething()
,则使用基类的方法:
a->DoSomething(); //Results in Base class method being called.
但我希望/希望使用B类的方法。你能告诉我出了什么问题吗?
答案 0 :(得分:4)
根据您描述的症状:
前进的方法是在派生类中指明函数是一个覆盖:
class A {
...
virtual void DoSometing();
};
class D : public A {
...
void DoSomething() override;
};
在这种情况下,如果不匹配,您将收到明确的编译器错误消息。
答案 1 :(得分:0)
以下示例实现了您的要求。
#include <iostream>
class A
{
public:
virtual void DoSomething()
{
std::cout << "A::DoSomething" << std::endl;
}
};
class B : public A
{
public:
virtual void DoSomething()
{
std::cout << "B::DoSomething" << std::endl;
}
};
int main(int argc, char **argv)
{
A *a = new B();
a->DoSomething();
delete(a);
return 0;
}
输出:
B::DoSomething