【问题标题】:Can I have a virtual function that must be overridden from a non-abstract base [duplicate]我可以有一个必须从非抽象基础覆盖的虚函数吗?
【发布时间】:2013-08-11 03:32:39
【问题描述】:

假设我有基类和派生类

class MyBaseClass
{
public:
   virtual void MustBeOverRidden()
   { 
      DoSomething();
   }
};

class MyDerivedClass : public MyBaseClass
{
public:
   void MustBeOverRidden()
   { 
      MyBaseClass::DoSomething();
      DoSomethingElse();
   }
};

如果 BaseClass 是抽象的,我可以声明

  virtual void MustBeOverRidden() = 0;

但是在这种情况下,基类功能通常会作为派生功能的一部分被调用。在这种情况下,有没有办法强制所有派生类覆盖基类函数?或者,我可以提供一个纯虚函数的实现吗?

编辑: 纯虚函数的实现不起作用,因为我需要能够实例化我的基类,这会导致 错误 C2259: 'MyBaseClass' : cannot instantiate abstract class

【问题讨论】:

  • 你的意思是class MyDerivedClass : public MyBaseClass
  • 是的,HAL,很好发现!

标签: c++


【解决方案1】:

是的,可以强制派生类覆盖虚函数,并提供实现:

class MyBaseClass
{
public:
   virtual void MustBeOverRidden() = 0;
};

void MyBaseClass::MustBeOverRidden()
{ 
    DoSomething();
}

【讨论】:

  • 执行此操作时,基类仍然是抽象的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
  • 2010-10-14
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多