C++第三站

一.第一部分—C++三大特性之继承

1.意义:

减少代码重复

2.继承:

类A继承类B,则A类表示子类,B类表示父类。在A类中含有B类中的特征,还包括自身的特征。(子类对象也可以做父类)

3.语法:

class 子类(派生类):继承方式 父类(基类)

4.继承方式:

子类使用public继承方式时,父类中三种权限都可以继承,但是private权限不可访问
子类使用protected继承方式时,父类中的属性和行为的权限都为protected,private权限除外
子类使用private继承方式时,父类中的所有属性和行为的权限都是private权限
总结:
a.子类继承的方式是什么,子类中的行为和属性的权限就是什么,父类中private权限的行为或属性除外(子类无法访问)
b.父类中所有非静态成员属性都会被子类继承下去,父类中私有成员属性可以被继承但是无法被访问

5.继承中构造函数与析构函数的顺序

构造父类–构造子类–析构子类–析构父类

6.继承中同名成员的处理方法

当子类与父类出现同名属性成员(静态成员属性与非静态成员属性都使用下面办法解决)时,该如何区分该同名属性成员是子类还是父类的
解决办法:
a.访问子类同名属性成员: 通过子类对象直接访问子类中的同名成员(子类对象.同名成员)
b.访问父类同名属性成员: ::给同名成员加上作用域即可区分(子类对象.父类::同名成员)
如果子类中出现和父类同名的成员函数,子类的同名成员函数会隐藏掉父类中所有的同名成员函数(包括重载函数)

7.多继承(实际开发中不建议使用)

语法:class 子类:继承方式 父类1,继承方式 父类2…

8.菱形继承

两个派生类继承自同一个基类,又有同一个类继承两个派生类
菱形继承会产生两个问题:
a.D会产生数据的二义性
b.D继承的BC的数据只需要一份,如何解决该问题
解决问题:
a.添加作用域::来区分成员属性和行为
b.使用虚继承(class 子类:virtual 继承方式 父类{})//BC类继承A类采用虚继承的方式

二.第二部分—C++三大特性之多态

1.多态的分类及区别

多态分类区别
动态多态:派生类和虚函数运行时多态函数地址晚绑定:运行阶段确定函数地址
静态多态:函数重载、运算符重载函函数地址早绑定:编译阶段确定函数地址

多态:同一操作作用域不同的对象,可以有不同的解释,并且产生不同的执行结果
多态满足条件:
a.继承关系
b.子类要重写父类中的虚函数(该虚函数可以定义为纯虚函数,即使用多态时父类可以定义为一个抽象类)
注:重写表示,对父类中的虚函数(纯虚函数)进行重写(函数名称、返回值、参数都必须保持一致)

2.多态的使用:

父类的指针或引用指向子类的对象(父类 * 变量名 = new 子类;//父类的指针 -> 子类的对象)

3.New的使用:(开辟空间后需要对堆区空间进行手动的释放delete 变量名)

开辟堆区
实例化一个对象

4.纯虚函数和抽象类

a.在多态中,父类中的虚函数实现都是无意义的,所以可以将多态中的父类中的虚函数定义为纯虚函数
b.语法:virtual 返回值类型 函数名 (参数列表) = 0;
c.抽象类:含有纯虚函数的类
d.特点:
无法实例化对象,子类必须重写父类中的纯虚函数,否则也属于抽象类

5.虚析构和纯虚析构

问题:多态使用时,如果子类中有属性开辟到堆区,则父类指针在释放时无法调用到子类的析构代码
解决:将父类中的析构函数该为虚析构或者纯虚析构(两个析构函数都需要具体的实现,不能只在类中定义)

以上内容根据黑马程序员视频进行总结

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值