C++类的特性之多态

理解

多态是指,不同类型的对象对于同一消息产生不同的行为。消息是指,对类的成员函数的调用,行为是指,成员函数的不同实现。在c++中多态分为两种:编译时的多态和运行时的多态。编译时的多态是通过函数重载或运算符重载实现的,运行时多态是通过继承和虚函数实现的。对应两种编译方式,动态联编和静态联编。联编的意思是,把一个标识符和一个内存地址联系起来的过程。静态联编是在程序运行之前完成的,动态联编是在程序进行的时候完成的。
静态联编方式下,同一个成员函数在基类和派生类中的不同版本是不会在运行时根据程序代码自动绑定的,必须通过类的虚函数机制,实现
不同函数版本的动态联编。

虚函数

关键字:virtual 修饰集类中的public 和protected的成员函数。在程序执行过程中,根据基类对象指针所指向的派生类对象,或通过基类引用对象所引用的派生类对象,就能确定哪个版本被激活,从而实现动态联编。

一般格式:

virtual <函数类型 > <函数名>(<形式参数列表>)

举例:
形状类(基类)指针指向三角形类(派生类),该指针调用求面积函数时,若不采用虚函数的方式,仍然调用的是基类的求面积函数,但若采用虚函数(基类的求面积函数被virtual修饰,派生类对应函数可不由virtual修饰),调用的是派生类的求面积函数。
特别地:
虚函数 在派生类里面重新定义时,函数类型必须和基类的虚函数完全匹配(不同于函数重载)。析构函数可以定义为虚函数,构造函数不能定义为虚函数。

纯虚函数

在基类说明的虚函数,但在该基类没有实现定义,要求所有的派生类都必须实现自己的版本。
一般格式:

virtual 类型 函数名(参数表)=0;

扩展:抽象类
抽象类至少有一个纯虚函数。如果抽象类的一个派生类没有位继承的虚函数定义实现版本,那么它仍然是抽象类。对于纯虚函数实现版本的派生类称为具体类。抽象类只能做其他类的基类,不能建立抽象类的对象,不能作为参数类型,函数返回类型,显示类型转换等。

发布了164 篇原创文章 · 获赞 69 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/wqy20140101/article/details/72801462
今日推荐