class A {
public:
    A():i(10){}
    int get_i() { cout << "A.get_i" << endl; return i; }
private:
    int i;
};

class B :public A {
public:
    B():j(20){}
    int get_i() { cout << "B.get_i" << endl; return 0; }
    void f() { cout << "B.i = "<< A::get_i() << "    B.j = " << j << endl; }
private:
    int j;
};

int main() {
    A a;
    B b;

    A*pa = &b;        //不把b当B看了,只取它A的特性。
    pa->get_i();
    pa->f();    //这是非法的!

    return 0;
}

不把b当B看了,而是把它当成一个A,只取它里面A属性的部分。

所以,pa->get_i()调用的实际上是A的get_i()

pa->f()是一个非法调用。因为A里面没有f函数。

posted on 2017-12-20 11:23  newbird2017  阅读(128)  评论(0编辑  收藏  举报