- 1、本文档共33页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]05继承与派生
第7章 继承与派生 继承与派生——从思维概念到C++的类 类族、根类、直接基类、间接基类 派生类的声明 派生类的声明举例 派生类成员的生成过程 保护成员和不可访问成员 公有继承和访问控制 派生类的访问权限 访问权限的传递 派生类和类外访问能力的区别 访问能力举例 描述工具 类型兼容规则(赋值兼容规则) 类型兼容规则的形实结合形式 类型兼容规则实例 派生类的构造函数 派生类的构造执行顺序 派生类构造函数举例(1) 派生类构造函数举例(2) 派生类的析构函数 派生类析构函数举例 派生类构造、析构综合举例 基类成员的可见性问题 基类成员被屏蔽的例子 派生类和友元 作业 习题5:一、二、三(1)、四(1)、五 多继承 多继承(可见性和二义性问题) 多继承的构造和析构 多继承时的赋值兼容规则 虚基类 虚基类派生类的构造函数 类似于单继承: 派生类的对象可以赋值给任一基类对象 派生类对象的地址可以赋值给指向任一基类的指针 派生类的对象可以初始化任一基类的引用 * * 算法 方法学 语法 开发平台(环境) 现实例子 人脑思维特征(大脑的沟状回专司概念的分类和派生) 在程序设计方法学方面,程序语言的继承与派生带来的好处: 代码重用 分工协作 可扩充 上位概念叫基类,下位概念叫派生类,或分别叫父类与子类 多个派生类,派生类的派生类 直接基类、间接基类、类族、根类↓ 派生类能继承基类的属性和行为 A B1 B2 C1 C2 C3 E D 根类 E的直接基类是C1,间接基类有B1,A 派生类的写法: class 派生类名:访问控制 基类名 { // 新增成员 }; 访问控制有三种:public,private,protected 访问控制为public(private,protected)的派生叫公有(私有、保护)派生。 在派生类对象的内存构成中,前面部分是基类的数据,后面部分是派生类新增的数据。 class employee { protected: char name[20]; int individualEmpNo; int grade; float accumPay; static int employeeNo; public: employee(); ~employee(); void pay(); void promote(int); void SetName(char *); char *GetName(); int GetindividualEmpNo(); int GetGrade(); float GetaccumPay(); }; class technician : public employee { private: float hourlyRate; int workHours; public: technician(); void SetworkHours(int wh); void pay(); }; 吸收基类成员:除了构造函数和析构函数外全盘吸收 改造基类成员:1、访问控制 2、同名覆盖(同名隐藏) 添加新的成员:数据、函数 不能访问 继承:可使用,但访问方式有变 派生类中 没有声明 新增:按派生中的声明方式访问 同名覆盖:按派生中的声明方式访问 派生类中 有声明 基类中 没有声明 基类中 有声明 派生类中成员的可访问性 保护成员具有私有成员和公有成员的双重角色 对派生类的成员函数而言,它是公有的,可以被访问; 对其他函数而言则是私有的,不能被访问。 基类中私有成员到了派生类,便是不可访问的,无论是派生类类内还是类外,都不能访问。 对没有基类的类而言,其成员都是可访问的。 class Point { public: void InitP(float xx = 0, float yy = 0) { X = xx; Y = yy; } …… private: float X, Y; }; class Rectangle : public Point { public: void InitR(float x, float y, float w, float h) { InitP(x, y); W = w; H = h; } float GetH() { return H; } float GetW() { return W; } private: float W, H; }; 不可访问 不可访问 私有 私有 私有派生 不可访问 不可访问 基类中不可访问的 不可访问 不可访问 基类中
文档评论(0)