C语言试题学习考试大全.ppt_第1页
C语言试题学习考试大全.ppt_第2页
C语言试题学习考试大全.ppt_第3页
C语言试题学习考试大全.ppt_第4页
C语言试题学习考试大全.ppt_第5页
已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论