对于基类中的虚函数,在派生类中写一个同名但函数前面不同的函数,导致的是覆盖而不是重写,通过基类指针(引用)无法正确地调用派生类函数(多态)。
#include <iostream>#include <cstring>#include <vector>#include <new>using namespace std;class Base {public:virtual void Fun() const {cout << "Base Fun" << endl;}};class Derive: public Base {public:virtual void Fun() { // 这里没加const// 此时在这个函数后面加上override会报错// 所以在重写函数时加上override可以在编译期发现问题cout << "Derived Fun" << endl;};};int main() {Base b;Derive d;b.Fun();d.Fun();const Base *pb1 = &b;const Base *pd1 = &d;pb1->Fun();pd1->Fun();// const Base *pb2 = &b;// const Derive *pd2 = &d;// pb2->Fun();// pd2->Fun(); // 编译错误return 0;}

必须要函数签名一样才是重写,才能正确地多态调用。
#include <iostream>#include <cstring>#include <vector>#include <new>using namespace std;class Base {public:virtual void Fun() const {cout << "Base Fun" << endl;}};class Derive: public Base {public:virtual void Fun() const override { // 加上了constcout << "Derived Fun" << endl;};};int main() {Base b;Derive d;b.Fun();d.Fun();const Base *pb1 = &b;const Base *pd1 = &d;pb1->Fun();pd1->Fun();return 0;}

