网站大量收购独家精品文档,联系QQ:2885784924

[工学]C++多态性和虚函数专题学习.ppt

  1. 1、本文档共122页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]C多态性和虚函数专题学习

CWnd Controls ... Dialog Boxes CButton CDialog ? CBitmapButton ? 但是它们都是多接口界面。因为A::Display()和B::Display()都是普通的成员函数,则按“静态联编”机制来实现调用,即在编译时按调用成员函数的对象确定好调用哪个类的成员函数。如前所述,仍然是基类对象a调用基类的成员函数A::Display(),派生类对象b调用派生类的成员函数B::Display(),但是它不是单接口界面而是多接口界面。 (4)由于对象引用也是地址传递方式,与对象指针有类似的性质,即基类的对象引用可用于从基类公有继承的任何派生类对象”。因此例5.7可改写为: void Show(A r) { r.Display( ); } void main( ) { A a; B b; a.Display( );//use A::Display( ) b.Display( );//use B::Display( ) Show(a); //use A::Display( ) Show(b); //use A::Display( ) } ? ? 又如: 层次 Point(x,y) 1 ? Rectangle Circle 2 ? Window 3 ? ... ... #include iostream.h //例5.8 class Point { public : Point(double i, double j) { x = i; y = j; } double Area( ) const { return 0.0; } private : double x, y; }; class Rectangle : public Point { public : Rectangle(double i, double j, double k, double l); double Area(void) const { return w * h; } private : double w , h ; }; Rectangle::Rectangle(double i, double j, double k, double l) : Point(i, j) { w = k ; h = l ; } void fun(Point s) //单接口界面 { cout “The Area = “ s.Area( ) endl; } void main( ) { Rectangle rec(3.0 , 5.2 , 15.0 , 25.0); fun(rec); } 该程序的输出结果: The Area = 0 ?程序的输出结果表明,由于采用静态联编,在fun()函数中,由s所引用的对象执行的Area()操作,在程序编译阶段被选择到Point::Area()函数体代码上,从而导致输出不期望的结果,而编程者希望s所引用的对象执行的Area()操作,应选择到Rectangle::Area()函数体代码上,完成计算长方形面积的任务,这是静态联编所达不到的。 §5.5 虚函数 ? 1.静态联编:所谓“联编”是当函数调用时,链接上相应函数体的代码,这一程序执行过程称为联编。例如: ... print(3.1415926); //函数调用语句 ... print(double value)//函数头 { cout value; } //函数体 C++有两种函数联编机制,静态联编和动态联编。静态联编(Static Binding或Early Binding先期联编)是在编译时,编译系统根据对象就能决定调用固定(程序运行期间不能改变)的函数体代码段。例如:编译系统根据浮点数3.1415926这一实例,调用print(double value){ cout value; } 这一函数体代码段,生成完成向CRT屏幕输出浮点数的机器码代

文档评论(0)

ipbohn97 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档