第三阶段继承和派生类实验手册.doc_第1页
第三阶段继承和派生类实验手册.doc_第2页
第三阶段继承和派生类实验手册.doc_第3页
第三阶段继承和派生类实验手册.doc_第4页
第三阶段继承和派生类实验手册.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一阶段 C+中类的实现第四章 继承性和派生类 【实验目标】 完成本章的内容以后,您将达到: 使用继承 使用继承中的构造函数和析构函数 使用多继承本章实验给出了全面的操作步骤,请学生按照给出的步骤独立完成实验,以达到要求的实验目标。第一阶段指导学习(60分钟)1. 继承使用继承,我们能够在类之间重用函数。基类成员的可访问性根据它们是私有的、公有的还是保护成员而不同。派生类在成员只能访问基类的公有和保护成员。当一个派生类生自多个基类时,就发生了多重继承。当基类有同名的成员函数时,我们需要使用作用域解析操作符来引用正确的类。在下面所示的程序中,我们将使用两个基类,并从这两个基类公有派生一个类。该程序将从用户获得有关学生个人情况和成绩的信息并显示这些信息。1) 声明基类class Teacher/声明类Teacher(教师)public:/公有部分Teacher(string nam , int a, string t);/构造函数void display();/输出教师有关数据protected:/保护部分string name;int age;string title;/职称;class Student/定义类Student(学生)public:Student(char nam,char s,float sco);/构造函数void display();/输出学生有关数据protected:char name120;char sex;float score;/成绩;2) 声明派生类声明派生类需要指定每个基类的访问说明符。class Graduate:public Teacher,public Student/声明多重继承的派生类Graduatepublic:Graduate(string nam, char nam1,int a, char s, string t, float sco, float w): Teacher(nam, a, t),Student(nam1, s, sco),wage(w) void show()/输出研究生的有关数据cout name: name endl;cout age: age endl;cout sex: sex endl;cout score: score endl;cout title: title endl;cout wages: wage endl;private:float wage;/工资;3) 定义类的成员函数:Teacher:Teacher(string nam , int a, string t)/构造函数name = nam;age = a;title = t;void Teacher:display()cout name: name endl;cout age: age endl;cout title: title endl;Student:Student(char nam,char s,float sco)/构造函数strcpy(name1,nam);sex = s;score = sco;void Student:display()cout name: name1 endl;cout sex: sex endl;cout score: score endl;下面我们来看完整的程序。#include #include using namespace std;class Teacher/声明类Teacher(教师)public:/公有部分Teacher(string nam , int a, string t);/构造函数void display();/输出教师有关数据protected:/保护部分string name;int age;string title;/职称;class Student/定义类Student(学生)public:Student(char nam,char s,float sco);/构造函数void display();/输出学生有关数据protected:char name120;char sex;float score;/成绩;class Graduate:public Teacher,public Student/声明多重继承的派生类Graduatepublic:Graduate(string nam, char nam1,int a, char s, string t, float sco, float w):Teacher(nam, a, t),Student(nam1, s, sco),wage(w) void show()/输出研究生的有关数据cout name: name endl;cout age: age endl;cout sex: sex endl;cout score: score endl;cout title: title endl;cout wages: wage endl;private:float wage;/工资;Teacher:Teacher(string nam , int a, string t)/构造函数name = nam;age = a;title = t;void Teacher:display()cout name: name endl;cout age: age endl;cout title: title endl;Student:Student(char nam,char s,float sco)/构造函数strcpy(name1,nam);sex = s;score = sco;void Student:display()cout name: name1 endl;cout sex: sex endl;cout score: score endl;int main()Graduate grad1(Wang-li,Wang-li,24,f,assistant,89.5,1234.5);grad1.show();return 0;编译通过后,运行程序结果如图4.1: 图4.1:运行结果2. 继承的工作方式当在基类和派生类中都使用构造函数时,基类在派生类之前就被初始化,根据派生类的构造函数代码使用默认构造函数或带有参数的构造函数。基类构造函数的调用顺序与基类在派生类声明中声明的顺序相同,最后调用派生类的构造函数。析构函数的调用顺序与构造函数的调用顺序相反,首先调用派生类的析构函数,然后调用基类的析构函数。在下面的程序中,我们将看到在使用多重继承时如何调用构造函数和析构函数。这些类都有默认的构造函数和析构函数。编译并执行下面程序: #include class Apublic:A()cout 类A的构造函数 endl;A()cout 类A的析构函数 endl;class B:public Apublic:B():A()cout 类B的构造函数,从A派生而来 endl;B()cout 类B的析构函数 endl;class C:public Apublic:C():A()cout 类C的构造函数,从A派生而来 endl;C() cout 类C的析构函数 endl;class D:public C,public BB b;/基类对象public:D():C(),B()cout 类D的构造函数,从B和C派生而来,n 内部有一个B对象 endl;D() cout 类D的析构函数 endl;void main()cout 定义类C的一个对象n;C cc;cout endl;cout 定义类D的一个对象n;D dd;cout num name sex;void display()cout num: num endl;cout name: name endl;cout sex: sex age addr;vid display_1()cout num: num endl;/企图引用基类的私有成员,错误cout name: name endl;/企图引用基类的私有成员,错误cout sex: sex endl;/企图引用基类的私有成员,错误cout age: age endl;/引用派生类的私有成员,正确cout address: addr age addr;void display_1()cout age: age endl;/引用派生类的私有成员,正确cout address: addr endl;/引用派生类的私有成员,正确private:int age;string addr;b.如果需要运行程序必须要有主函数,增加主函数,其内容为:定义派生类的对象;通过派生类的对象调用基类的方法get_value(),用来进行派生类属性num,name,sex的输入,调用派生类的对象的方法 get_value1()来实现派生类属性age,addr的输入;通过派生类调用基类的display()实现其私有成员的输出,调用派生类的display1()方法,实现派生类私有成员的输出。代码如下:void main()Student1 stud;/定义派生类Student的对象studstud.get_value();stud.get_value1();stud.display();stud.display_1();完成代码编写后,编译运行。习题二: 派生类成员的访问属性(1)修改补充下列代码,使代码能够实现输入数据,及显示输出数据的功能:#include #include using namespace std;class Student/声明基类public:/基类公有成员void get_value()cin num name sex;void display()cout num: num endl;cout name: name endl;cout sex: sex age addr;void display_1()cout num: num endl;cout name: name endl;cout sex: sex endl;cout age: age endl;/引用派生类的私有成员,正确cout address: addr endl;/引用派生类的私有成员,正确private:int age;string addr;void main()Student1 stud;/定义派生类Student的对象studstud.display_1();stud.num = 10023;提示:以保护方式实现派生类编译运行如上程序,使程序能够完成题目要求。(2)修改上述代码,改为公用继承方式。上机调试程序,使之能正确运行并得到正确的结果。对这两种继承方式作比较分析,考虑在什么情况下二者不能互相代替。第三阶段作业作业一分别定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)。要求。1 在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。2 在Teach

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论