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

发布时间:2024年01月19日

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多态案例三--电脑组装

?电脑组装需求:

?电脑组装的实现:

文章来源:https://blog.csdn.net/m0_61780125/article/details/135636589
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。