C ++ - 不需要使用基本方法

时间:2016-04-18 18:56:42

标签: c++ oop inheritance polymorphism

我有一个基类A和一些派生类BCD,它们都有一个方法DoSomething(),它是虚拟的在基类方法中(它在所有子类和基类中实现)。

我有一个问题,派生类B使用基类A中的方法。这可能是设计不良的结果,但我没有看到问题,因为实现非常简单。

以下

中创建的B类对象
A* a = new B();

如果我为此对象调用方法DoSomething(),则使用基类的方法:

a->DoSomething(); //Results in Base class method being called.

但我希望/希望使用B类的方法。你能告诉我出了什么问题吗?

2 个答案:

答案 0 :(得分:4)

根据您描述的症状:

  • 要么忘记了基类成员定义中的virtual关键字。
  • 或者您在派生类中的签名有细微差别。

前进的方法是在派生类中指明函数是一个覆盖:

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