隐藏

#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

posted @ 2018-11-20 12:21  c&z  阅读(134)  评论(0编辑  收藏  举报