如何在 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调用虚函数=](因为它无论如何都会被继承,你将调用虚函数的继承副本)。
希望对您有所帮助。编码愉快! :)
我有一个基础 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调用虚函数=](因为它无论如何都会被继承,你将调用虚函数的继承副本)。
希望对您有所帮助。编码愉快! :)