upcast

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函数。

转载于:https://www.cnblogs.com/buddho/p/8072826.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值