#include <iostream> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ class Super { public: Super(); virtual void someMether(); protected: int mPritectedInt; private: int mPrivateInt; }; class Sub : public Super { public: Sub(); void someMether() override; //重写父类的someMether方法 void someOtherMether(); private: double mPrivateDouble; }; Super::Super() :mPritectedInt(0) ,mPrivateInt(0) { } void Super::someMether() { std::cout << "Super's someMether\r\n" << std::endl; } Sub::Sub() :mPrivateDouble(0.0) { } void Sub::someMether() { std::cout << "Sub's someMether" << std::endl; } void Sub::someOtherMether() { std::cout << "Sub's someOtherMether" << std::endl; } int main(int argc, char** argv) { Super super; Sub sub; sub.someMether(); sub.someOtherMether(); return 0; }
首先声明的时只有在父类的方法前写上virtual关键字,派生类才能重写这个方法,
建议在派生类的后边写上override,这并非是关键字,但是却起着关键字的作用,
override由两个作用:
1.在函数比较多的情况下可以提示读者某个函数重写了基类虚函数(表示这个虚函数是从基类继承,不是派生类自己定义的);
2.强制编译器检查某个函数是否重写基类虚函数,如果没有则报错。