- 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面向对象程序设计第六章多态性与虚函数课件
第六章多态性与虚函数 多态性的概念 一个典型的例子 虚函数 纯虚函数与抽象类 第六章多态性与虚函数 编译时的多态性(函数重载) int add(int x, int y) { return x+y; } double add(double a, double b) { return a+b; } int main() { coutadd(5, 10) endl; coutadd(5.0, 10.5) endl; } 一个典型的例子 class A{ public: void show() { coutAendl; } }; class B:public A { public: void show() { coutBendl; } }; class C:public B { public: void show() { coutCendl; } }; int main() { C c; c.show(); c.B::show(); c.A::show(); } 虚函数的作用 c.show(); c.B::show(); c.A::show(); 用这种方法来区分同名函数,不方便。 提出设想:(通过同一种形式达到不同目的) 能否用同一个调用形式,如pt-show();既能调用派生类的函数,又能调用基类的同名函数。 运行时的多态性(虚函数) 虚函数的作用:是允许在派生类中重新定义与基类同名的函数,并且可以通过基类的指针或引用来访问基类和派生类中的同名函数。 虚函数的定义 定义虚函数的方法如下: virtual 函数类型 函数名(形参表) { // 函数体 } c++规定:当一个成员函数声明为虚函数后,其派生类中的同名函数都自动成为虚函数。在派生类中重新定义基类中的虚函数时,可以不用关键字virtual来修饰这个成员函数 。 虚函数与重载函数的区别 在一个派生类中重新定义基类的虚函数是函数重载的另一种形式,但它不同于一般的函数重载。 ◆ 普通的函数重载:函数名相同,参数不同(参数个数或类型不同)。 ◆ 当重载一个虚函数时,也就是说在派生类中重新定义虚函数时,要求函数名、返回类型、参数个数、参数的类型和顺序与基类中的虚函数原型完全相同。 ◆ 如果仅仅返回类型不同,其余均相同,系统会给出错误信息; ◆若仅仅函数名相同,而参数个数或类型不同,系统将它作为普通的函数重载,这时将丢失虚函数的特性。 虚函数的限制: 1.必须是成员函数 2.不能是静态成员函数 3.不能是inline函数 4.构造函数不能是虚函数 纯虚函数和抽象类 纯虚函数: 是一个在基类中说明的虚函数,只有函数声明,没有函数体,不能被调用。 纯虚函数的定义形式如下: virtual 函数类型 函数名(参数表)=0; “=0 ”不表示函数的返回值为0,它只起形式上的作用,告诉编译系统“这是虚函数”,它的实现留给派生类去定义。 6.4 抽象类 如果一个类包含纯虚函数,那么就称该类为抽象类。 抽象类只能作为其他类的基类来使用 不能建立抽象类对象 例 8-5 class A //抽象基类B0声明 { public: //外部接口 virtual void display( ) =0; //纯虚函数成员 }; class B: public A //公有派生 { public: void display(){coutB::display()endl;} }; class C: public A //公有派生 { public: void display(){coutC::display()endl;} }; int main() //主函数 { A *p; //声明抽象基类指针 B b; //声明派生类对象 C c; //声明派生类对象 p=b; p-display(); //调用派生类B函数成员 p= c; p-display(); //调用派生类C函数成员 } 抽象类的作用: 抽象类为抽象和设计的目的而声明,是更高层次的抽象。 将有关的数据和行为组织在一个继承层次结构中,保证派生类具有要求的行为。 如抽象基类shape(包含纯虚函数draw())派生出4个类:Square(正方形)、Circle、Rectangle(矩形)、Triangle(三角形),各个派生类定义自己的draw函数,作用分别是在屏幕上画出正方形、圆、矩形、三角形。
您可能关注的文档
最近下载
- 2022二级建造师《机电》章节练习6.1.docx VIP
- 荆轲刺秦王教学课件.ppt VIP
- 《角膜移植手术》课件.ppt VIP
- 2008年工业企业厂界环境噪声排放标准.pdf VIP
- 2025年第十九届天原杯全国初中奥林匹克化学竞赛试题及答案 .pdf VIP
- GB50169-2016 电气装置安装工程接地装置施工及验收规范.docx VIP
- 人教版三年级数学上册第八单元《分数的初步认识》课堂作业设计.pdf VIP
- 中药饮片产品质量回顾分析报告.pdf VIP
- 2022二级建造师《机电》章节练习5.31.docx VIP
- 山东省泰安市肥城市2024-2025学年八年级上学期1月期末考试历史试题 .docx VIP
原创力文档


文档评论(0)