我有一组这样的类:

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
    }
};

这就是non-virtual interface惯用语。

关于c++ - C++避免手动调用基类函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9689074/

10-11 18:40