文档详情

第05章继承与派生C++课件.ppt

发布:2016-12-27约字共67页下载文档
文本预览下载声明
类模板允许定义友元。在一个类模板中,可以声明如下三种形式的友元函数: 友元函数为一般函数,则它是该类模板的所有实例化类的友元函数 友元函数为函数模板,但其类型参数与类模板的类型参数无关,则该函数模板的所有实例化函数都是类模板的所有实例化类的友元函数 友元函数为函数模板,但其类型参数与类模板的类型参数有关。通常,函数模板往往用该类模板作为其函数参数的类型,此时该友元函数模板的实例有可能只是该类模板的某些特定实例化(而不是所有实例化)类的友元 5.5 应用举例 【例5.12】类模板和模板类的使用 【例5.13】定义一个单向链表的模板类,分别实现增加、删除、查找和打印操作 【例5.14】定义了一个基类Person类及其两个派生类(Teacher和Student) 【例5.15】某个单位现有的所有员工根据领取薪金的方式分为如下几类:时薪工(hourly worker),计件工(piece worker),经理(manager),佣金工(commission worker)。时薪工按工作的小时支付工资,对于每周超过50小时的加班时间,按照附加50%支付。按生产的每件产品给计件工支付固定工资,假定该工人仅制造一种产品。经理每周得到固定的工资。佣金工每周得到少许的固定保底工资,加上该工人在一周内总销售的固定百分比。试编制一个程序来实现该单位的所有员工类,并加以测试 【例5.16】从二叉排序树中删除一个结点 习题 1. 什么是类的继承与派生? 2. 类的三种继承方式之间的区别是什么? 3. 派生类能否直接访问基类的私有成员?若否,应如何实现? 4. 派生类构造函数和析构函数的执行顺序是怎样的?在多继承中,派生类构造函数和析构函数的执行顺序又是怎样的? 5. 派生类的构造函数和析构函数的作用是什么? 6. 多继承一般应用在哪些场合? 7. 在类的派生中为何引入虚基类?在含有虚基类的派生类中,当创建它的对象时,构造函数的执行顺序如何? 8.设计一个大学的类系统,学校中有学生、教师、职员,每种人员都有自己的特性,他们之间又有相同的地方。利用继承机制定义这个系统中的各个类及类上必须的操作 9.假定车可分为货车和客车,客车又可分为轿车、面包车和公共汽车。请设计相应的类层次结构 10.设计一个能细分为矩形、三角形、圆形和椭圆形的“图形”类。使用继承将这些图形分类,找出能作为基类部分的共同特征(如宽、高、中心点等)和方法(如初始化、求面积等),并看看这些图形是否能进一步划分为子类 11.考虑大学的学生情况,试利用单继承来实现学生和毕业生两个类,设计相关的数据成员及函数,编程进行测试继承的情况 12. 定义一个哺乳动物类,再由此派生出人类、狗类和猫类,这些类中均有speak()函数,观察在调用过程中,到底使用了谁的speak()函数 13. 通过多重继承定义研究生类,研究生既有学生的属性,又有教师的属性 温故而知新,可以为师矣 理想犹如天上的星星,我们犹如水手,虽不能到达天上,但是我们的航程可凭它指引 ———— 美国政治家 舒尔茨·C 理想是指路明灯。没有理想,没有坚定的方向;没有方向,没有生活 ———— 俄国作家 托尔斯泰·L 你的程序设计能力与你投入到计算机上的时间成正比 要想学好程序设计,就得多读程序,多编程序,多调试程序 class base { public: x(); x(int a); x(char * p); }; class derive : base { public: base::x; //基类中所有重载函数x在派生类中将变为公有 }; (5)若派生类中具有与基类同名的函数,则基类中此函数不能在派生类中进行访问声明,因为此时基类的同名函数在派生类的作用域中不可见 class derive : base { public: void f(int s); base::f; //错误,不能调整访问域 }; 5.2 多继承 5.2.1 多继承的概念和定义 5.2.2 赋值兼容规则 5.2.3 二义性和支配规则 5.2.1 多继承的概念和定义 class派生类名:[继承方式]基类名1,[继承方式]基类名2, ..., [继承方式]基类名n { //定义派生类自己的成员; }; 多继承可以看作是单继承的扩展,单继承可以看作是多继承的一个最简单的特例 5.2.2 赋值兼容规则(类型自动转换) 在公有派生情况下,每个派生类的对象都是基类的一个对象,它继承了基类的所有成员并没有改变其访问权限。赋值兼容规则就是在公有派生情况下,允许一个派生类的对象可以作为基类的对象来使用的地方。具体而言,有三种情况可以把一
显示全部
相似文档