- 1、本文档共67页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言大学教程C的语言第21章
⑤ 区别静态关联和动态关联。 ⑥ 如果在基类声明了虚函数,则在派生类中凡是与该函数有相同的函数名、函数类型、参数个数和类型的函数,均为虚函数(不论在派生类中是否用virtual声明)。 ⑦ 使用虚函数提高了程序的可扩充性。 关键字dynamic_cast(动态强制转换):操作符dynamic_cast将一个指向基类的指针转换为一个指向派生类的指针(如果不能正确转换,则返回0——空指针)。在类层次间进行上行转换时. class Shape { ??? public: virtual ~Shape(); ??? virtual void draw() const = 0; }; class Rollable { ??? public: virtual ~Rollable(); ??? virtual void roll() = 0; }; class Circle : public Shape, public Rollable { ??? void draw() const; ??? void roll(); }; class Square : public Shape { ??? void draw() const; }; ? //横向转型失败 Shape *pShape1 = new Square(); Rollable *pRollable1 = dynamic_castRollable*(pShape1); //pRollable为NULL //横向转型成功 Shape *pShape2 = new Circle(); Rollable *pRollable2 = dynamic_castRollable*(pShape2); //pRollable不为NULL 实例练习 设计shape类层次结构。每个TwoDShape类都包含成员函数getArea,用于计算二维形状的面积。每个ThreeDShape类都包含成员函数getArea和getVolume,分别用于计算三维形状的表面积和体积。编写一个程序,使用一个Shape指针的vector对象,他的元素指向类层次总每个具体类的对象。 1.程序打印输出该vector对象的所有形状循环中,程序应判断每个形状是二维形状还是三维形状,如果是二维形状,显示面积,如果是三维形状,显示表面积和体积。 * * * * * * In class base In class base In class B In class base In class base Delete []Bptr Delete [] Aptr Delete []baseptr Delete []Bptr Delete [] Aptr Delete []baseptr * * * //主函数 int main() { Student stud1(1001,″Li″,87.5); Graduate grad1(2001,″Wang″,98.5,563.5); Student *pt=stud1; //定义指向基类对象的指针变量pt pt-display( ); pt=grad1; pt-display( ); return 0; } num:1001 (stud1的数据) name:Li score:87.5 num:2001 (grad1中基类部分的数据) name:wang score:98.5 pay=1200 (这一项以前是没有的) 由虚函数实现的动态多态性就是: 同一类族中不同类的对象,对同一函数调用作出不同的响应。虚函数的使用方法是: ① 在基类用virtual声明成员函数为虚函数。这样就可以在派生类中重新定义此函数,为它赋予新的功能,并能方便地被调用。在类外定义虚函数时,不必加virtual。 ② 在派生类中重新定义此函数,要求函数名、函数类型、函数参数个数和类型全部与基类的虚函数相同,并根据派生类的需要重新定义函数体。 C++规定,当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数。因此在派生类重新声明该虚函数时,可以加virtual,也可以不加,一般在每一层声明该函数时都加virtual,使程序更加清晰。 如果在派生类中没有对基类的虚函数重新定义,则派生类简单地继承其直接基类的虚函数。 ③ 定义一个
您可能关注的文档
最近下载
- 教育测量与评价教案.doc
- ISO∕IEC 20000-1:2018《信息技术服务管理第一部分:服务管理体系要求》之23-“8.7 服务保证”理解与应用指导材料.docx VIP
- 七年级上册英语完形填空、阅读理解100题(含参考答案).pdf VIP
- 实习周志20篇.doc
- 2023-2024学年北京市西城区三帆中学八年级下学期期中考试物理试卷+答案解析.pdf VIP
- ISO∕IEC 20000-12018《信息技术服务管理第一部分:服务管理体系要求》之3-“确定服务管理体系范围”理解与应用指导材料.docx VIP
- 矩形容器设计计算(F型-拉杆加固)-JB4735.xls
- 中国东方:中国金融不良资产市场调查报告2024(摘要).pdf
- ISO∕IEC 20000-1:2018《信息技术服务管理第一部分:服务管理体系要求》之15-“7.5成文信息”理解与应用指导材料.docx VIP
- ISO∕IEC 20000-1:2018《信息技术服务管理第一部分:服务管理体系要求》之24-“9.1监视、测量、分析和评价”理解与应用指导材料.docx VIP
文档评论(0)