0628第五讲继承(2)子类->父类

0628第五讲继承(2)子类->父类
1、子类对象当作父类对象使用
* 子类对象赋值给父类对象、引用、指针时,父类对象、引用、指针依然是父类,当通过父类引用去调用被子类覆盖的函数时,还是调用父类版本的函数
* 不能调用子类扩展的成员
1.1子类对象直接复制给父类对象:仅仅是把继承自父类部分成员读取进行赋值

1.2父类引用指向子类对象:
父类函数被重写后父类对象还是调用自己的函数,父类引用不能调用子类扩展函数
1)子类对象初始化父类引用
2)函数形參是一个父类引用、实參是一个子类对象
3)函数原型返回值为父类引用,返回值是一个子类对象

1.3父类指针指向子类对象
1)子类对象初始化父类对象
2)函数形參是一个父类指针、实參是一个子类对象地址
3)函数原型返回值为父类指针,但返回值为一个子类对象地址

1.3拷贝构造函数
1)使用子类对象直接创建父类对象
2)函数参数是父类对象,实參时一个子类对象
3)函数原型返回值是父类对象,但返回值是一个子类对象

Base(const Base& b){
cout<<“调用父类拷贝构造函数”<<endl;
}
Derived(const Derived &d):Base(d){
cout<<“调用子类拷贝构造函数”<<endl;

Base b(100);
Derived d(1,2);

Base bc (b);//调用父类拷贝构造函数
Base bd(d);//调用父类拷贝构造函数

1.4子类对象可以当成父类对象使用、但是父类对象不可以当成子类对象来使用
强制转换:向下转换(不被使用、不安全(编译器不能确定转型是否成功))->dynamic_cast<>()
eg:
((Derived*)pb)->funcd();

4、子类中的构造函数、析构函数
{Derived d(10,20);}
父类的构造函数 b
子类的构造函数 d
子类的析构函数 ~d
父类的析构函数 ~b
1.1构造函数:派生类创建时会调用积累构造函数构造基类部分,然后再构造自己扩展的空间

1.2析构函数:子类对象销毁时,先调用子类析构函数,来时释放扩展的指针堆空间,再自动调用父类析构函数,来释放继承自父类部分指针的堆空间(子类只需要释放自己扩展的空间,继承部分默认由父类完成)

1.3拷贝构造函数:先调用父类拷贝构造函数(把继承自父类部分先进行赋值),再完成子类扩展部分内容的赋值。
Derived(const Derived &d):Base(d){
cout<<“子类拷贝构造函数”<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值