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

Viv*_*oel 7 c++ inheritance design-patterns

我有一组像这样的类:

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
    }
  }
};
Run Code Online (Sandbox Code Playgroud)

有没有办法可以避免手动输入此代码:

if (A::Doit() == 1) { return 1; } else {
Run Code Online (Sandbox Code Playgroud)

在每一个派生自A的班级?

ken*_*ytm 9

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

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
    }
};
Run Code Online (Sandbox Code Playgroud)

这被称为非虚拟接口习语.