C++避免手动调用基类函数

C++ avoiding manually calling base class function

本文关键字:调用 基类 类函数 C++      更新时间:2023-10-16

我有一组这样的类:

class A {
 public:
  int DoIt() {
     //common code
  }
};
class B : public A {
  int DoIt() {
    if (A::DoIt() == 1) {
      return 1;
    }
    else {
      // do b specific code
    }
  }
};
class C : public A {
  int DoIt() {
    if(A::DoIt()==1) {
      return 1;
    }
    else {
      // do c specific code
    }
  }
};

有没有一种方法我可以避免手动放入这个代码:

if (A::Doit() == 1) { return 1; } else {

在从A派生的每个类中?

只需将特定代码分离到另一个方法虚拟方法。

class A
{
public:
    int DoIt() /*final*/
    {
        // common code
        if (return_value == 1)
           return 1;
        else
           return DoIt_specific();
    }
private:
    virtual int DoIt_specific() = 0;
    // ^ or some "A"-specific actions if A cannot be abstract.
};
class B : public A
{
    virtual int DoIt_specific() /*override*/
    {
        // specific code for B
    }
};

这就是所谓的非虚拟接口习惯用法。