博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
虚函数和多态
阅读量:6239 次
发布时间:2019-06-22

本文共 979 字,大约阅读时间需要 3 分钟。

一.运算符重载

 

不能重载的运算符:     成员运算符“.”

                          作用域运算符“::”

                        条件运算符“?:”

                              指针运算符 *

                          编译预处理命令的开始符号 #

 

运算符重载的两种形式:成员函数或者友元函数

 

二.虚函数

1.      析构函数可以是虚函数,但是构造函数不能是虚函数

2.      在类体系中访问一个虚函数时,应使用指向基类的指针或对基类的指针或者对基类的引用,以满足运行时多态的要求。当然也可以像调用普通函数一样利用对象名来调用一个虚函数,这时会失去虚特性

3.      虚函数必须是一个类的成员函数,不能使友元,但是它可以是另一个类的友元。另外虚函数不能是一个静态函数

4.      在基类中使用虚函数保证了通过指向基类对象的指针调用基类的一个虚函数时,系统对该调用进行动态绑定,而使用普通函数则是静态绑定

5.      若在基类的构造(析构)函数中也引用虚函数,则所引用的只能是本类的虚函数,因为派生类中的构造(析构)函数的执行尚未完成。

 

虚函数的使用:

       定义一个基类类型的对象指针或引用可使其在需要时指向相应的类对象,并用此指针或引用去引用该对象所对应的类中已被“虚拟化”的函数。

 

三.抽象类:如果一个类至少有一个纯虚函数,那么就称该类为抽象类

1.      抽象类不能用作参数类型、函数返回值类型或显示转换的类型

2.      可以申明指向抽象类的指针和引用,此指针可以指向它的公有派生类,进而实现多态性

3.      从一个抽象类派生的具体类必须提供纯虚函数的实现代码,如果没有定义则该派生类也是抽象类。但此情况不会影响以后的派生类

4.      在成员函数中可以调用纯虚函数,但是在构造函数或者析构函数内调用一个纯虚函数将导致程序连接错误,因为没有为纯虚函数定义代码

 

最好将基类的析构函数定义为虚函数

 

要实现动态连编必须通过对象指针调用虚函数

 

虚函数和重载在设计方法上有何相同和不同处?

       答:1.重载函数要求函数有相同的返回值类型和函数名称,并有不同的函数参数序列;而虚函数要求这三项完全相同

             2.重载函数可以是成员函数或者友元函数,虚函数只能是成员函数

         3.重载函数的调用是以所传递参数序列的差别作为调用不同函数的依据;虚函数时根据对象的不同去调用不同类的虚函数

         4.虚函数在运行时表现出多态功能,这是C++的精髓;而重载函数则在编译时表现出多态性

附:

这是我以前看书写的笔记,现在拿出来再看看

转载地址:http://ocdia.baihongyu.com/

你可能感兴趣的文章
C# yeild使用
查看>>
MapReduce-Hadoop分布式计算模型
查看>>
StrokePlus
查看>>
joisino's travel
查看>>
组合游戏-博弈论中经典模型题目
查看>>
浅谈HTTP的GET和POST
查看>>
点灯笼
查看>>
try{}catch{}
查看>>
[Aaronyang] 写给自己的WPF4.5 笔记11[自定义控件-AyImageButton的过程 1/4]
查看>>
Linux VMware新添加网络适配器找不到配置文件问题
查看>>
Javascript百学不厌 - this
查看>>
机器学习中的数学(1)-回归(regression)、梯度下降(gradient descent)
查看>>
实用算法实现-第 14 篇 启发式搜索
查看>>
c#常用的排序算法
查看>>
论文阅读——Visual inertial odometry using coupled nonlinear optimization
查看>>
Office插件编程[转]
查看>>
读代码还是读文档,来自知乎
查看>>
Linux 常见编译错误
查看>>
ASP.NET MVC 3 Controller
查看>>
Vs中调试MVC源代码步骤
查看>>