C++学习总结——继承

目录

1.继承的概念与定义

   1.1继承的概念

   1.2继承的定义

2.继承的使用

   2.1 派生类和基类的对象赋值转换

   2.2 继承里的作用域

3.特殊成员在继承中的变化

   3.1 类中的默认成员函数与继承

   3.2 友元与继承

   3.3 静态成员与继承

4.继承中特殊的多继承

   4.1 菱形继承

   4.2菱形虚拟继承

5.继承的总结

1.继承的概念与概念

   1.1继承的概念

继承机制是面向对象程序设计 使代码可以复用 的最重要的手段,它允许程序员在 持原有类特性的基础上进行扩展 ,增加功能,这样产生新的类,称派生类。
继承呈现了面向对象 程序设计的层次结构 ,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用 继承是类设计层次的复用

  1.2继承的定义

定义格式:

继承方式的影响:

1.基类中的private在派生类中,无论是什么继承方式,在派生类中都是无法访问的。
2.基类在派生类中的继承方式越小(public > protected > private),基类中的成员就为较小的继承方式访问。
总结及延申:
1.基类中的private,虽然在派生类中无法访问,但是在派生类中是是存在的。
2.类为class的默认继承方式和默认成员类型一样为private,类为struct的默认继承方式也和其默     认成员函数一样为public,但是一般是要显示写继承方式的。
3.protected为什么出现呢?private限定死了,无论类外还是派生类,都无法访问,但是我们有限     制类外访问,却要派生类访问的需求,所以有了protected(保护)类型。
4.在实际应用中protected与private的继承方式使用很少,所以不推荐使用。
2.继承的使用
  2.1  派生类和基类的对象赋值转换
可以理解为 切割

注意事项:

基类不能派生类赋值的。派生类中有新成员,如果是基类赋值派生类,新成员会是随机值。

解析及补充:

1.派生类对象可以赋值给 基类的对象/基类的指针/基类的引用

2.基类的指针/基类的引用 可以通过类型强制转换给 派生类的指针/派生类的引用,但是必须基类指针指向派生类。

  2.2 继承里的作用域

解析及补充:

1.在继承中基类派生类都有独立的作用域。

2.如果基类和派生类中有同名的成员,派生类会屏蔽基类中的同名成员,这种情况可以叫隐藏重定义。

3.基类和派生类中的成员,只要函数名相同就会构成隐藏(重定义)。

4.为避免隐藏发生,实际应用中继承最好不要用相同的函数名

3.特殊成员在继承中的变化

  3.1 类中的默认成员函数与继承

类中有6个默认成员函数,如图:

这里,主要讲解:构造函数,析构函数,拷贝构造函数,赋值重载函数在继承中的变化。

构造函数:

解析及补充:

1.派生类构造函数必须调用基类的构造函数初始化派生类中基类的部分成员之后才是调用派     生类中的构造函数。

2.如果基类中的构造函数不是默认构造函数,必须在派生类构造函数初始化列表阶段显示调用

析构函数:

解析及补充:

1.派生类析构函数调用派生类的析构函数,之再调用基类的析构函数。

2.只有析构函数的调用是先派生类,后基类。

3.可以理解成 栈先入栈的,后出栈,如图。

拷贝构造函数:

解析:

派生类中的拷贝构造函数必须,调用基类中的拷贝构造函数,之调用派生类中的拷贝构造函数。

赋值重载函数:

解析:

派生类中的赋值重载函数必须,调用基类中的赋值重载函数,之调用派生类中的赋值重载函数。

4.继承中特殊的多继承

  4.1 菱形继承

菱形继承的问题:有数据冗余和二义性的问题。后续用菱形虚拟继承解决了这个问题。java等语言,通过放弃了多继承,规避了这个问题。
数据冗余:
未完待续
  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值