- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第10讲动态多态性虚函数
编写一个程序,测试输入的长度能否构成一个三角形。构成三角形的条件是任意两边之和大于第三边。 提示:可构造一个边长类,该类包括一个对边长“加”运算和边长“比较”运算的重载。 虚函数 思考:为什么要引入虚函数 【例1】没有使用虚函数的例题。 #includeiostream.h class base /定义基类base { public: void who( ) {coutthis is the class of base!endl;} }; 虚函数 class derive1:public base //定义派生类derive1 { public: void who() {coutthis is the class of derive1!endl;} }; 虚函数 class derive2 : public base //定义派生类derive2{ public: void who() {coutthis is the class of derive2!endl;} };void main(){ base obj,*ptr; derive1 obj1; derive2 obj2; ptr = obj; ptr-who(); 虚函数 ptr=obj1; //指向第一个子类 ptr-who(); ptr=obj2; //指向第二个子类 ptr-who(); obj1.who(); //分别指向子类 obj2.who(); 虚函数 程序运行结果: This is the class of base! (a) This is the class of base! (b) This is the class of base! (c) This is the class of derive1! (d) This is the class of derive2! (e) 虚函数 就是说,通过指针引起的普通成员函数调用,仅仅与指针的类型有关,而与指针正指向什么对象无关。在这种情况下,必须采用显式的方式调用派生类的函数成员。 要调用派生类的函数成员,就需要引入虚函数的概念。这里,只需将基类的who()函数声明为虚函数即可。 虚函数 * 虚函数的定义及使用 1.虚函数的定义 虚函数的定义是在基类中进行的。它是在基类中需要定义为虚函数的成员函数的声明中冠以 关键字virtual。当基类中的某个成员函数被声明为虚函数后,此虚函数就可以在一个或多个派生类中被重新定义,在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型以及参数的顺序都必须与基类中的原型完全相同。 虚函数 virtual函数类型函数名(形参表) { 函数体 } 其中,被关键字virtual说明的函数为虚函数。特别要注意的是,虚函数的作用是允许在派生类中对基类的虚函数重新定义,显然它只能用于类的继承层次中。 虚函数 *使用虚函数的情况: (1)首先应考虑成员函数所在的类是否作为一个基类,然后看成员函数在类的继承后有无可能被更改功能,如果希望更改其功能,一般应该把它声明为虚函数。 (2)应考虑对成员函数的调用是通过对象名还是通过基类指针或引用,如果是通过基类指针或引用去访问,则应声明为虚函数。 虚函数 虚函数 class Derived : public Base{ int c; public: Derived(int x,int y,int z):Base(x,y){c=z; } void show() //重新定义虚函数show() { cout Derived---------\n; coutcendl;} }; 虚函数 虚函数 2. 虚函数与重载的关系 在一个派生类中重新定义基类的虚函数是函数重载的另一种特殊形式,但它不同于一般的函数重载。 一般的函数重载,只要函数名相同即可,函数的返回类型及所带的参数可以不同。但当重载一个虚函数时,也就是说在派生类中重新定义此虚函数时,要求函数名、返回类型、参数个数、参数类型以及参数的顺序都与基类中的原型完全相同,不能有任何的不同。 3.多继承中的虚函数
您可能关注的文档
最近下载
- 河南能源集团网络安全攻防知识培训(分享版)(1).pptx
- 2025年党员考试试题及答案.doc VIP
- 湖南公务员考试真题2024.docx VIP
- mPGES-2作为吸入全身麻醉药物异氟醚作用靶点的应用.pdf VIP
- 案例研究-案例研究:设计与方法.pdf VIP
- 2024届高考物理一轮复习热点题型归类训练专题13动力学和能量观点的综合应用(原卷版+解析).docx VIP
- 烟草质量检验竞赛通用知识题库-上(单选、多选题库).docx VIP
- 德育常规工作培训(1).pptx
- OMRON欧姆龙安全产品F3SG-SR PG系列安全光幕 多光束安全传感器F3SG-SR PG 系列 F3SG-□SR□系列安全光幕 用户手册.pdf
- 保险的培训资料1—开拓准客户.ppt VIP
文档评论(0)