多态性和虚函数谭浩强c++.pptVIP

  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文档。上传文档
查看更多
多态性和虚函数谭浩强c

多态性和虚函数 函数重载 函数重载 函数重载 函数重载 函数重载 [例6.1.1]分析下述的程序代码 #includeiostream.h double fun(double c1=1,double c2=3,double c3=3) { return c1+c2+c3; } double fun(double c1,double c2) { return c1+c2; } void main() { coutfun(2.5,3.5)endl; } 运算符重载 运算符重载 运算符重载 运算符重载 运算符重载 运算符重载 运算符重载 运算符重载 运算符重载 运算符重载 运算符重载 运算符重载 运算符重载 运算符重载 运算符重载 运算符重载 运算符重载 运算符重载 运算符重载 运算符重载 静态联编与动态联编 静态联编与动态联编 静态联编与动态联编 静态联编与动态联编 虚函数 虚函数 虚函数 虚函数 虚函数 虚函数 虚函数 虚函数 虚函数 虚函数 虚函数 虚函数 纯虚函数和抽象类 纯虚函数和抽象类 纯虚函数和抽象类 纯虚函数和抽象类 纯虚函数和抽象类 纯虚函数和抽象类 纯虚函数和抽象类 纯虚函数和抽象类 纯虚函数和抽象类 纯虚函数和抽象类 纯虚函数和抽象类 纯虚函数和抽象类 纯虚函数和抽象类 虚析构函数 虚析构函数 虚析构函数 虚析构函数 虚函数是动态联编的基础。要求虚函数是类的成员函数,而且必须是非静态的。声明虚函数的方法如下: virtual 类型说明符 函数名 (参数表) 也就是讲,被关键字virtual说明的函数称为虚函数。 如果类中的成员函数被说明为虚函数,则意味着该成员函数具有多态的特征,换句话讲,该成员函数在派生类中可能会有不同的实现。当通过类的对象指针或对象引用来调用虚函数时,对虚函数的调用采取动态联编方式,即在运行时进行关联或束定。 这里,我们再次强调,动态联编只能通过指针或引用标识的对象来操作虚函数。如果采用一般类型的标识对象来操作虚函数,将采取静态联编的方式调用虚函数。 下面给出一个动态联编的算例。 [例6.9] 动态联编的算例。 #includeiostream.h class Point { public: Point(double i,double j) { x=i; y=j; } virtual double Area() const { return 0; } private: double x,y; }; class Rectangle:public Point { public: Rectangle(double i,double j,double k,double m):Point(i,j) { w=k; h=m; } virtual double Area() const; private: double w,h; }; double Rectangle:: Area() const { return w*h; } void fun(Point s) { couts.Area()endl; } void main() { Rectangle rec(1,2,3,4); fun(rec); } 说明: 本算例说明了在fun()函数的引用对象参数s被动态联编,该函数体内调用的Area()函数是在运行中束定的。 派生类对基类的虚函数进行替换时,要求派生类说明的虚函数与基类中的被替换的虚函数之间满足下列条件: 与基类的虚函数有相同的参数个数。 其参数的类型与基类的虚函数的对应参数类型相同。 其返回值与基类虚函数相同,或者都返回指针或引用,并且派生类虚函数所返 回的指针或引用的基类型是基类中被替换的虚函数所返回的指针或引用的基类型的子类型。 满足上述条件的派生类的成员函数,自然是虚函数,可以不加virtual说明。也就是说,在本例中Rectangle类的Area()函数既使不加virtual声明,它同样是虚函数。 [例6.10] 分析下列程序。 #includeiostream.h class A { public: virtual void act1(); void act2() { act1(); } }; void A::act1() { coutA类的act1()函数被调用!\n; } class B:public A { public: void act1() { coutB类的act1()函数被调用!\n; } }; void main() { B b; b.act2(); } 分析: 该程序的运行结果是什么? 如果将A::act2()的实现改为:this-act1(),输出结果会出现什么变化

文档评论(0)

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

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

1亿VIP精品文档

相关文档