- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* class triangle:public graphelem{ public: virtual void draw(){ ... }; //虚函数draw,负责画出“triangle” ... }; ? (3) 动态联编(dynamic binding) ? 与虚函数以及程序中使用指向基类的指针(变量)密切相关。 注意:C++规定,基类指针可以指向其派生类的对象(也即,可将派生类对象的地址赋给其基类指针变量), 但反过来不可以。这一点正是函数超载及虚函数用法的基础。 * 例1. 建立上述类line、类circle以及类triangle的类对象,而后调用它们各自的draw函数“画出”它们。 ?? 方法1:直接通过类对象(由类对象可以唯一确定要调用哪一个类的draw函数) ? line ln1; circle cir1; triangle tri1; ln1.draw(); cir1.draw(); tri1.draw(); * 方法2:使用指向基类的指针(动态联编,要靠执行程序时其基类指针的“动态”取值来确定调用哪一个类的draw函数) ? graphelem *pObj; line ln1; circle cir1; triangle tri1; pObj=lin1; pObj-draw(); pObj=cir1; pObj-draw(); pObj=tri1; pObj-draw(); * 例2. 假设inte_algo为基类,其中说明了一个虚函数integrate,并在其三个派生类中,也说明了该虚函数integrate(使用不同方法计算定积分)。 ? 那么,可使用函数integrateFunc来实现调用不同虚函数integrate的目的: ? void integrateFunc(inte_algo * p){ //基类指针p可指向任一派生类的对象 p-integrate(); //调用的将是不同派生类的integrate函数 } ? 主调函数处使用: integrateFunc( 某派生类的类对象地址 ); * 在编译阶段,系统无法确定究竟要调用哪一个派生类的integrate。此种情况下,将采用动态联编方式来处理:在运行阶段,通过p指针的当前值,去动态地确定对象所属类,而后找到对应虚函数。 ?? 8.6.3 纯虚函数与抽象基类 ? 如果不准备在基类的虚函数中做任何事情,则可使用如下的格式将该虚函数说明成纯虚函数: virtual 函数原型=0; * 纯虚函数不能被直接调用,它只为其派生类的各虚函数规定了一个一致的“原型规格”(该虚函数的实现将在它的派生类中给出)。 ? 含有纯虚函数的基类称为抽象基类。注意,不可使用抽象基类来说明并创建它自己的对象,只有在创建其派生类对象时,才有抽象基类自身的实例伴随而生。 实际上,抽象基类是其各派生类之共同点的一个抽象综合,通过它,再“加上”各派生类的特有成员以及对基类中那一纯虚函数的具体实现,方可构成一个具体的实用类型。 ? 另外:如果一个抽象基类的派生类中没有定义基类中的那一纯虚函数、而只是继承了基类之纯虚函数的话,则这个派生类还是一个抽象基类(其中仍包含着继承而来的那一个纯虚函数)。 * 8.7 虚函数使用实例 -- 8.7.1计算函数的定积分-- 参看书p278, 采用矩形法、梯形法以及simpson法来计算同一函数的定积分。 ? 此三种方法均将区间[a,b]分为n等份,而后以不同方式求出各小段对应的小面积s[i],并将它们相加到一起来作为近似结果。 ? #include iostream.h ? float function(float x){ //欲积分的函数 return 4.0/(1+x*x); } * class inte_algo { protected: float a,b; //a,b为积分区间的左右边界 int n; //n表示把[a,b]划分成多少个小区段进行积分 float h,sum; //h表示步长,sum表示积分结果值 public: inte_algo (float left,float right,int steps){ ... } virtual void
您可能关注的文档
最近下载
- 医师访谈记录.pdf VIP
- Unit 4 School Life 第3-4课时Reading and Rriting 课件 中职高一学年英语高教版基础模块1.ppt
- 必威体育精装版中药饮片质量标准通则(试行).doc VIP
- 医学临床三基(输血学)-输血免疫学基础(精选试题).pptx VIP
- 我们的大脑的教学课件.ppt VIP
- 洞察世间智慧:哲学伴随我成长课件.ppt VIP
- 超星网课《汽车之旅》超星尔雅答案2023章节测验答案.doc VIP
- 老年人继承法培训课件.pptx VIP
- 科学湘科版二年级上册全册课件.pptx
- 第7课全球航路的开辟和欧洲早期殖民扩张【中职专用】《世界历史》(高教版2023基础模块).pptx VIP
文档评论(0)