C++16——向上造型

把子类的对象当作父类来看待:如果对象B是对象A的子类,那么对象B可以当作对象A来使用。

#include<iostream>
using namespace std;

class A{
public://public private可以写多个
    int i;
public:
    A():i(10) {}
};
class B:public A{
private:
    int j;
public:
    B():j(30){ }
    void f() {cout<<"B.j="<<j<<endl;}
};
int main(){
	A a;
    B b;
    cout<<a.i<<" "<<b.i<<endl;//10 10
    
    cout<<sizeof(a)<<" "<<sizeof(b)<<endl;// 4 8 没有函数,只有成员变量
    
    int *p=(int*)&a;
    cout<<p<<" "<<*p<<endl;//a的地址 10
    
    *p=20;
    cout<<a.i<<endl; //20
    
    p=(int*)&b;
    cout<<p<<" "<<*p<<endl;//b的地址(与a的地址不同,这是两个不同的对象) 10
    
    p++;   //改变b的地址
    *p=50;
    b.f();  //B.j=50
    return 0;
}

向上构造:(upcasting)把子类对象当作父类来看待。

Manager pete("Pete","444-55-6666","Bakery");
Employee* ee=&pete;//Upcast 指针
Employee& er=pete;//Upcast 引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值