我试图覆盖基类中另一个方法使用的基类方法;但是,当派生类调用基类的use-method时,将永远不会执行派生的used-method,而是调用基类的used-method。这是一个例子:
#include <iostream>
using namespace std;
class Base {
public:
Base() {}
virtual ~Base() {}
void printLeft() { cout << this->getLeft(); }
int getLeft() { return 0; }
};
class Derived: public Base {
public:
Derived() {}
virtual ~Derived() {}
int getLeft() { return 1; }
};
int main(int argc, char *argv[]) {
Derived d = Derived();
d.printLeft();
}
运行
main()
会显示0
,表明使用了Base
的getLeft()
方法,而不是派生对象的方法。我如何更改此代码,以便从Derived 实例调用
Derived::getLeft()
时称为? 最佳答案
您只需要将getLeft
虚拟:
class Base {
public:
Base() {}
virtual ~Base() {}
void printLeft() { cout << this->getLeft(); }
virtual int getLeft() { return 0; }
};
在C++中,默认情况下,成员函数不是虚拟的。也就是说,您不能在子类中覆盖它们。