




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
10.继承(inheritance),10.1.1 类层次结构,几个概念: 基类(父类) 派生类(子类):从基类派生而成的类 基类和派生类:构成类的层次关系,10.1.2 派生类对象构造 (Derived Object Structure),基类:BaseClass class BaseClass int a,b; /other private member public: /public member ;,派生类:B class B : public BaseClass int c; /other private member public: /public member ;,a b,BaseClass,a b c,B,基类部分,派生部分,10.2 访问父类成员,10.2.1 继承父类成员 /= / f1001.cpp / 继承 /= #include #include using namespace std; /- class Advisor int noOfMeeting; ; /-,class Student string name; int semesterHours; double average; public: Student(string pName = “noname“) :name(pName),average(0),semesterHours(0) void addCourse(int hours,double grade) double totalGrade = (semesterHours*average + grade); /总分 semesterHours += hours; /总修学时 average = semesterHours ? totalGrade/semesterHours : 0; /平均分 ,int getHours() return semesterHours; double getAverage() return average; void display() cout“name = “name“ “,hours = “semesterHours “,average = “averageendl; ;,class GraduateStudent:public Student Advisor advisor; int qualifierGrade; public: int getQualifier() return qualifierGrade; ;,void main() Student ds(“Lo lee Undergrad“); GraduateStudent gs; ds.addCourse(3,2.5); ds.display(); gs.addCourse(3,3.0); gs.display(); ,图 GraduateStudent 内存布局,example,GraduateStudent gs; Student s(gs); Student,example,void fn(Student ,C+面向对象编程中一条重要的规则是: 公有继承意味着”是一个”(is a),对于class D : public B; 当写下类D(”Derived”)从类B(”Base”)公有继承时,你实际上是在告诉编译器(以及读这段代码的人):类型D的每一个对象也是类型B的一个对象,但反之不成立; 也就是说,B表示一个比D更广泛的概念,D表示一个比B更特定概念;你是在声明:任何可以使用类型B的对象的地方,类型D的对象也可以使用,因为每个类型D的对象是一个类型B的对象。相反,如果需要一个类型D的对象,类型B的对象就不行:每个D “是一个“ B, 但反之不成立。,看这个例子: class Person . ; class Student: public Person . ;,从日常经验中我们知道,每个学生是人,但并非每个人是学生。这正是上面的层次结构所声明的。我们希望,任何对 “人” 成立的事实,如:都有生日,也对 “学生” 成立;但我们不希望,任何对 “学生” 成立的事实, 如:都在某一学校上学,也对 “人“ 成立。人的概念比学生的概念更广泛;学生是一种特定类型的人。,在C+中,任何一个其参数为Person类型的函数(或Person的指针或Person的引用)可以实际取一个Student对象(或Student的指针或Student的引用),例: void dance(const Person / 错误! p不是学生,10.2.2 类内访问控制,继承成员的访问方式 class Base int a ; public: void print() couta; /public member ; class Derived:public Base int b; public: void display() couta; /public member ;,protected,class Base int a; void f()couta; public: int b; void g()couta; protected: int c; void k() couta; ;,class Derived:public Base public: void df() couta; coutb; coutc; f(); g(); k(); ;,void func() Base b; coutb.a; coutb.b; coutb.c; b.f(); b.g(); b.k(); ,10.3派生类的构造,10.3.1 默认构造 通过默认的无参构造函数。,10.3.2 自定义构造,/= / f1002.cpp / 构造派生类 /= #include #include using namespace std; /-,class Advisor int noOfMeeting; public: Advisor()cout“Advisorn“; Advisor(const Advisor,class Student string name; int semesterHours; double average; public: Student(string pName = “noname“):name(pName),average(0),semesterHours(0) cout“Studentn“; void addCourse(int hours,double grade) double totalGrade = (semesterHours*average + grade); /总分 semesterHours += hours; /总修学时 average = semesterHours ? totalGrade/semesterHours : 0; /平均分 ,int getHours() return semesterHours; double getAverage() return average; void display() cout“name = “name“ “,hours = “semesterHours “,average = “averageen
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川省眉山市仁寿第一中学校南校区2024届高三上学期12月月考数学(理)无答案
- 江苏省盐城市2021-2022学年高三下学期第三次模拟考试英语 无答案
- 外语口语实例与试题及答案
- 前进步伐2025年入团考试试题及答案
- 提高意识2025年入团考试试题及答案
- 初级审计师备考日程安排与试题及答案
- 消防工程计算题技巧分享试题及答案
- 消防工作现实问题试题及答案
- 初级审计师考生的学习路径研究试题及答案
- 无人机操作中的安全技术试题及答案
- 运动营养学知到课后答案智慧树章节测试答案2025年春黑龙江冰雪体育职业学院
- 2025高级插花花艺师核心备考试题库及答案(浓缩300题)
- 光伏发电站施工规范完整版2025年
- 煤矿防洪专项应急预案
- 2025年陕西省初中学业水平考试英语 例析与指导 试卷示例题
- 汽轮机保护装置原理与应用考核试卷
- 2025年防诈骗面试题及答案
- 2025年春季学期 形势与政策 第四讲 厚植绿色底色 建设美丽中国讲义
- 2025发展对象考试试题库及参考答案(完整版)
- 浙江省2025年1月首考高考英语试卷试题真题(含答案)
- 工程量清单和招投标控制价编制服务方案
评论
0/150
提交评论