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

标签 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 的方法。你能告诉我哪里出了问题吗?

最佳答案

根据您描述的症状:

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

前进的方向是在派生类中指示该函数是一个覆盖:

class A { 
   ...
   virtual void DoSometing(); 
}; 
class D : public A {
   ...
   void DoSomething() override; 
};

在这种情况下,如果不匹配,您将收到一条明确的编译器错误消息。

关于C++ - 不需要使用基本方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36702159/

相关文章:

c++ - Engine.exe : 0xC0000005: Access violation 中 0x00000000 处的未处理异常

c++ - “对象”尚未声明错误

c# - 如何在一个解决方案中更好地组织多个项目及其各自的单元/集成测试?

Python:使用父类的构造函数初始化对象的成员?

c++ - 在 C++ 中,当继承一个类并覆盖一个函数时。从数组调用该重写函数时出现意外结果

c++ - 如何让 Qt Tree 模型与 QSet 一起工作?

c++ - 形状碰撞 C++ 的设计模式

python - 在 Python 3 中扩展一个类并使用 __init__ 构造它

java - android 如何检查哪个按钮被点击?

flutter - 不能将抽象类的子类型作为参数传递给函数