- 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
您可能关注的文档
最近下载
- 青春期性教育男生教案.pptx
- 第2课《中国人首次进入自己的空间站》 统编版语文八年级上册.pptx VIP
- (完整版)涉密人员因私出国审查审批表.docx VIP
- 2014款雷克萨斯GX400_汽车使用手册用户操作图解驾驶指南车主车辆说明书电子版.pdf
- 2024-2025学年小学地方、校本课程川教版可爱的四川教学设计合集.docx
- 介护老人护理.pptx VIP
- 生物安全柜检测.pptx VIP
- HIGEN 海坚FDA7000伺服驱动器用户手册.pdf
- DB64T 1967-2023 “互联网+城乡供水”数据规范.pdf VIP
- 化工总控工考试化工总控工初级试卷(化工总控工考试).doc VIP
文档评论(0)