#include <iostream> using namespace std; class Test { public: /*virtual*/ void print() { cout << "Test::print" << endl; } void test_print() { print(); } }; class Sub : public Test { public: /*virtual*/ void print() { cout << "Sub::print" << endl; } }; int main() { Sub * p = new Sub(); p->test_print(); return 0; }
此时的输出结果是:Test::print
原因:此时虽然父类的 print 被隐藏了,但是 test 函数中 print 默认的作用域是Test::print,所以此时调用的是父类的。子类内存:父类 print (被隐藏了,但是地址还是在的),父类 test_print,子类 print
当加上 virtual 关键字,那么在子类中父类的函数就被重写了,所以调用的就是子类的。子类内存:父类 test_print,子类 print