从覆盖函数调用重写函数

Igo*_*Oks 22 c++ oop virtual inheritance overriding

假设我在B类中有虚函数foo(),我需要在B的派生类之一D类中略有不同的行为.可以创建重写函数D :: foo(),并调用B :: foo( )从那里,经过特殊情况处理?像这样:

void D::foo()
{
  if (/*something*/)
     // do something
  else
     B::foo();
}
Run Code Online (Sandbox Code Playgroud)

我不是在问这是否会奏效,我知道会这样.我想知道,对于一个好的OOD来说它是否正确.

Gor*_*pik 20

这非常好.实际上,执行某些操作的规范方法是调用基类方法,然后执行任何操作(或者反过来).我在想operator=这里.构造函数通常也以这种方式工作,即使在初始化列表中有点伪装.


Ale*_*ter 6

是的,只要你没有违反Liskov替代原则,它就完全可以了.