第12章 节 虚函数与多态性《C++程序设计基础教程》课件.pptxVIP

第12章 节 虚函数与多态性《C++程序设计基础教程》课件.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第12章 虚函数与多态性 主讲:李政伟 2 第12章 虚函数与多态性 12.1 多态性的概念 12.2 虚函数的定义 12.3 抽象类 12.4 实例研究 3 多态性是OOP的重要特征之一。 多态一词最初来源于希腊语Polumorphos,含义是具有多种形式或形态的情形。 多态性:发出同样的消息被不同类型的对象接收时会导致完全不同的行为。 多态性:父类型具有“引用由它派生的任何子类型”的能力。 多态的实现途径 函数重载 运算符重载 虚函数 12.1 多态性(polymorphism)的概念 静态多态 动态多态 4 函数重载:在同一作用域内的多个函数采用相同名字,只要使用不同类型、不同数目的参数。 作为重载函数: (1)至少在参数个数、参数类型上有所不同。 (2)使用缺省函数参数要注意二义性。 如: void print(int a,int b); void print(int a,int b,int c=50); print(10,100); 12.1 多态性(polymorphism)的概念 5 12.1 多态性(polymorphism)的概念 运算符重载:对已有的运算符赋予多重含义。 必要性 C++中预定义运算符其运算对象只能是标准数据类型,而不适用于用户自定义类型(如类)。 实现机制 将指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参。 8 Rectangle::Rectangle(double i, double j, double k, double l) : Point(i,j) { w=k; h=l; } void fun(Point Pref) { coutArea=Pref.Area()endl; } void main() { Rectangle rec(3.0, 6.0, 15.0, 20.0); fun(rec); } 例12.1非虚函数举例 注意事项 派生类对象指针使用时应注意的问题: (1)声明为指向基类对象的指针可以指向它的公有派生类的对象,但不允许指向它的私有派生类的对象。 (2)允许声明为指向基类对象的指针指向它的公有派生类的对象,但不允许将一个声明为指向派生类对象的指针指向基类的对象。 (3)声明为指向基类对象的指针,当其指向它的公有派生类的对象时,只能直接访问派生类中从基类继承下来的成员,不能直接访问公有派生类中定义的成员。要想访问其公有派生类中的成员,可将基类指针用显式类型转换方式转换为派生类指针。 10 12.3 虚函数 12.3.1 虚函数的作用 同一类中不能定义名字,参数个数和类型都相同的函数,不能“重复定义”。 不同层次中可以出现名字、参数个数和类型都相同而功能不同的函数。系统按照同名覆盖的原则决定调用对象。 rc1.area( ) //派生类Rectangle的成员函数。 rc1.Point::area( ) //基类Point的成员函数 Pref.area( ) 11 虚函数的声明形式 virtual 函数类型 函数名(参数列表) { 函数体 } 成员函数,非static成员函数 有继承性,基类中定义了虚函数,派生类中无论是否说明,同原型函数都自动为虚函数。 作用:通过基类指针或引用调用执行时根据指针指向的对象类型动态决定调用哪个函数。 12.3 虚函数 12 class A{ public: virtual void display() {cout“A::display();} }; class B: public A { public: void display() //自动成为虚函数 { cout“B::display(); } }; class C: public B { public: void display() //自动成为虚函数 { cout“C::display()endl;} }; void fun(A *ptr) {ptr-display(); } void main() { A a1, *p; B b1; C c1; p=a1; fun(p); p=b1; fun(p); p=c1; fun(p); } 13 虚函数的使用方法 (1) 基类中用virtual声明其为虚函数 (2) 要求函数名、返回类型、参数个数和类型全部与基类的虚函数相同,根据需要重新定义函数体。 (3) 定义一个指向基类对象的指针变量,使它指向同一类族中要调用该函数的对象。 (4) 通过该指针变量调用此虚函数,调用的是指针变量指向的对象所属类的同名函数。 例12.2 基类与派生类中有同名函数 14 函数重载可用于普

文档评论(0)

youngyu0329 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档