如何要求childclass方法调用parentclass方法?

How to require child class method to call parent class method?

假设我有一个 parent class A.

class A
{
    public:
        A() {}

        void MyMethod()
        {
            printf( "A\n" );
        }
};

我有一个 child class B.

class B : public A
{
    public:
        B() {}

        void MyMethod()
        {
            printf( "B\n" );
        }
};

现在,我想要求 class B 调用 A::MyMethod(),而不是显式调用它,如上所示。结果:

A
B

或者

B
A

可以吗?

现在B->MyMethod()只调用child方法。

在 C++ 中,没有办法要求一个 class 方法调用另一个方法,除了要求派生 class 中的构造函数和析构函数必须调用父 class的,以特定的方式。

除此之外,在 C++ 中没有办法直接要求它。

Non-Virtual Interface成语有基础class定义一个public non-virtual 成员函数,以及一个私有虚成员函数 是派生 classes.

的覆盖点

public non-virtual 成员函数充当面向 API 的 public。

私有虚拟成员函数充当class层次结构 面对 API.

将这两个问题分开可能是一种方便的技术,尤其是 对于更大的项目,为了调试目的,为了确保 基础 class 的 public non-virtual 中的预操作和 post- 操作 成员函数。

#include <iostream>

using std::cout;

namespace {

class A {
    virtual void MyMethodImpl() const {
        // Derived classes should override this virtual member function
        // and add their extra steps there.
    }
public:
    virtual ~A() = default;
    A() {}

    void MyMethod() const {
        cout << "A::MyMethod before steps.\n";
        MyMethodImpl();
        cout << "A::MyMethod after steps.\n";
    }
};

class B : public A {
    void MyMethodImpl() const override {
        cout << "B::MyMethodImpl extra steps.\n";
    }
public:
    B() {}
};

} // anon

int main() {
    B b;
    b.MyMethod();
}