我一直在寻找一个基类和多个子类,每个子类都有一个函数的单独实现,该函数在许多共享函数中使用。这将类似于此
class A {
public:
int a() {
return 6;
}
int b() {
return a() - 2;
}
};
class B: public A {
public:
int a() {
return 10;
}
};
int main() {
B x;
std::cout << x.b() << std::endl;
}
如何让 x.b()
成为 8
而不是 4
?
最佳答案
你需要让你的函数成为虚函数,这样 a()
总是引用对象真实类中 a()
的实现:
class A {
public:
virtual int a() { //<<<<<<<<--------
return 6;
}
int b() {
return a() - 2;
}
virtual ~A() = default;
};
在带有非虚函数的版本中,b()
的主体调用它知道的唯一 a()
,即 A: :a()
。
作为一种好的做法,并且为了避免严重的错误,当您定义一个虚函数时,请在派生类中指示您重写该虚函数:
class B: public A {
public:
int a() override {
return 10;
}
};
另一个好的做法是预见基类中的虚拟析构函数。
关于c++ - 使用子函数的继承函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55329453/