- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C/C++语言程序设计辅导资料十六
主 题:第二十章 多态性
学习时间:201年月日-月日
内 容:
我们这周主要学习第二十章多态性的相关内容,希望通过下面的内容能使同学们加深对本章相关知识点的理解。
知识脉络:
多态性
运算符重载
虚函数
纯虚函数
抽象类
重点与难点:
1、重点:类的多态性,虚函数,纯虚函数。
2、难点:运算符重载。
一、多态性的概念
(1)多态性是面向对象程序设计的重要特征之一。
(2)多态性是指发出同样的消息被不同类型的对象接收时导致完全不同的行为。
(3)多态的实现:
①函数重载
②运算符重载
③虚函数二、静态联编与动态联编
1、联编(绑定):
①由于同名对象的多态性,程序在执行时需要确定具体的操作对象,即具体决定调用哪个函数。
②这种程序自身彼此关联的过程,称为联编。用来确定程序中的操作调用与执行该操作的代码间的关系。
③联编可在编译时完成,也可在运行时完成,分别称为静态联编和动态联编。
2、静态联编与动态联编
①联编:程序自身彼此关联的过程,确定程序中的操作调用与执行该操作的代码间的关系。
②静态联编(静态绑定):联编工作出现在编译阶段,用对象名或者类名来限定要调用的函数。
③动态联编(动态绑定):联编工作在程序运行时执行,在程序运行时才确定将要调用的函数。三、虚函数
1、相关知识
①用基类的指针指向公有派生类,可以访问派生类从基类中继承的成员函数。但如果派生类中也有同名的函数,则结果仍然是访问基类的同名函数,而不是派生类本身的函数。
②如果将基类中的这个函数设为虚函数,采用同样的方法,就可以访问派生类的同名函数,即通过基类类型的指针,在运行过程中可以访问不同的函数,实现运行过程的多态。
2、虚函数定义方法
在类的定义中,在函数原型之前写virtual。virtual 只用来说明类定义中的声明,不能用在函数实现时。以下定义存在错误:
class B0 //基类B0声明
{
public:
virtual void display();
};
virtual void B0::display()
{coutB0::display()endl;
}
3、使用虚函数
①虚函数是动态联编的基础,是非静态的成员函数。
②具有继承性,基类中定义了虚函数,派生类中无论是否说明,同原型函数都自动为虚函数。
③调用方式:通过基类指针或引用,执行时会根据指针指向的对象的类,决定调用哪个函数。
4、虚函数与重载函数的关系
(1)本质:虚函数不是重载定义而是覆盖定义。
(2)虚函数的原型必须一致。若出现不同,有下面两种情况:
①仅仅返回类型不同,其余均相同,系统会当作出错处理。
②函数原型不同,仅函数名相同。这样定义的虚函数和两个不同的函数名称效果是一样的。
5、说明:
①虚函数必须是定义它的类的成员函数,而不能是友元函数,虚函数可以在另一个类中被声明为友元函数。
②虚函数也不能是静态成员函数,因为虚函数调用要靠特定的对象来决定激活哪个函数。
③虚函数不能作为内联函数。
④构造函数不能是虚函数,但析构函数可以是虚函数。
⑤虚函数的访问规则是由声明确定的,它不受后来覆盖它的函数的访问规则的影响。四、纯虚函数
1、相关知识
①纯虚函数是在基类中说明的虚函数。
②纯虚函数本身不定义具体的操作。
③纯虚函数的声明格式为:virtual 函数类型 函数名(参数表)=0;
④纯虚函数在基类中没有函数体。
⑤纯虚函数在派生类中可以多态地定义具体的函数体。
2、抽象类
①带有纯虚函数的类称为抽象类。
②抽象类自身无法实例化,即不能定义一个抽象类的对象。 在抽象类的派生类中,可以具体定义纯虚函数的操作。这时的派生类就不是抽象类,就可以定义具体的对象。
3、抽象类的一般形式
带有纯虚函数的类称为抽象类:
class 类名
{ virtual 类型 函数名(参数表)=0; //纯虚函数
}
4、作用
①抽象类为抽象和设计的目的而建立,将有关的数据和行为组织在一个继承层次结构中,保证派生类具有要求的行为。
②对于暂时无法实现的函数,可以声明为纯虚函数,留给派生类去实现。
5、注意
①派生类如果没有全部定义纯虚函数的操作,继承了部分纯虚函数,则仍然是抽象类。
②可以声明一个抽象类的指针或引用。通过改变指针或引用的具体地址,指向相应的派生类的对象,以便在访问过程中实现多态的操作。
五、本节例题,写出下列程序的运行结果
#include iostream.h
class B0 //抽象基类B0声明
{
public: //外部接口
virtual void display( )=0; //纯虚函数成员
};
class B1: public B0 //公有派生
{
publ
文档评论(0)