如何在 C++ 中调用 class A 的方法 1 调用 class B 的方法 2?

How to call class A's method 1 which invokes class B's method 2 in C++?

我有一个基础 class A,希望创建一个具有非常相似功能的 class B。我想让class B有一个函数调用class A的func1(),但是调用的时候func2()被class B的func2()replaced/over-rided。我的目标是避免重复代码,不修改class A。下面的继承实现不起作用。我应该在这里使用继承吗?我怎样才能实现我的目标?

#include <iostream>
using namespace std;

class A {
public:
    void func1() {
        func2();
        cout << "class A fun1" << endl;
    }
private:
    void func2() {
        cout << "class A fun2" << endl;
    }
};

class B : A{
public:
    void func3() {
        func1();
        cout << "class B fun3" << endl;
    }
private:
    void func2() {
        cout << "class B fun2" << endl;
    }
};

int main() {
    B b;
    b.func3();
    return 0;
}

当前输出为:

class A fun2
class A fun1
class B fun3

但我想要的是:

class B fun2
class A fun1
class B fun3

您应该为此使用 virtual 函数。当函数声明为 virtual 时,编译器仅使用派生的 class.

中存在的虚函数的实现

基础class中的函数不能直接从基础class中使用。例如,如果您为 class A 创建一个对象,如果它被声明为虚拟的,您将无法调用 func2()

注意:即使派生class中不存在虚函数定义,您也可以从派生class调用虚函数=](因为它无论如何都会被继承,你将调用虚函数的继承副本)。

希望对您有所帮助。编码愉快! :)