[C++开发 02_多态(135)]

4.7多态

 4.7.1多态的基本概念
 4.7.1.1多态的基本语法

静态多态:

多态就是多种形态:函数重载就是可以让函数名有多种形态表现出来,由于我们的参数传入的个数不同,类型不同,或者顺序不同,都可以让函数名有多种形态来表现。运算符重载就是让我们的这些符号,加减乘除这些符号有多种形态表现出来,对于自定义的类型也可以加减乘除,这些都属于静态多态。

动态多态:

通常我们说的这种多态是动态多态,派生类和虚函数运行时多态。

在C++允许父子之间类型转换 ,它不需要强制类型转换,父类的引用可以直接指向子类的对象 

重载:是函数名相同,参数是不一样的,我们叫重载。

重写:函数的返回值相同,函数名要相同,形参的内容(参数列表:就是函数中括号里面的形参)也要相同,我们才叫重写。

函数前面加上virtual 关键字,变成虚函数,那么编译器编译的时候不能确定函数调用了。

4.7.1.2多态的原理剖析:

上面示例代码中动物类如果没有virtual关键字修饰的话,动物类就是一个空类,大小一个字节,只是为了区分

当在猫类里面没有发生重写时,猫类继承了动物类,因为没有发生重写,所以是继承的是动物类中 的函数,如下图

当猫类中重写动物类中的同名函数时,如下图:

总结如下:

4.7.2多态案例--计算器类

不使用多态实现计算器

使用多态的计算器:

总结:C+开发提倡利用多态设计程序架构,因为多态优点很多。

4.7.3纯虚函数和抽象类

纯虚函数:在第一个示例中,我们在动物类(也就是父类中)写的虚函数,我们的本意是传入什么动物让什么动物说话,并没有想要调用动物类(父类)中虚函数。所以我们就会发现父类中的虚函数用不到,因此我们可以把这个虚函数写为纯虚函数了。当类中出现了纯虚函数后,我们就把这这个类叫做抽象类。

1、它无法实例化对象,无论是在栈上还是在堆上。

2、子类必须重写抽象类中的纯虚函数,否者子类也属于抽象类,子类也无法实例化对象。

4.7.4多态案例二--制作饮品

4.7.5虚析构和纯虚析构

 纯虚析构需要在类内声明,还需要再类外实现。

  • 什么情况下需要虚析构和纯虚析构,再子类中如果有一些属性(变量数据)开辟到了堆区,所以需要走子类中的析构代码,如果使用多态是走不到(不经过)子类的析构,所以我们再父类中才加上虚析构和纯虚析构。

  • 不管是虚析构还是纯虚析构都是解决,多态中析构时不经过子类中析构代码的问题。
4.7.6多态案例三--电脑组装

 电脑组装需求:

 电脑组装的实现:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值