虚函数和多态

一.运算符重载

 

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

                          作用域运算符“::”

                        条件运算符“?:”

                              指针运算符 *

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

 

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

 

二.虚函数

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

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

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

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

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

 

虚函数的使用:

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

 

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

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

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

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

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

 

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

 

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

 

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

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

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

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

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

附:

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

原文链接: https://www.cnblogs.com/zhuyp1015/archive/2012/07/18/2598121.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    虚函数和多态

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/55838

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午6:52
下一篇 2023年2月9日 上午6:53

相关推荐