1、实验5 继承与派生序号:实验5 继承与派生 实验目的1、了解继承在面向对象程序设计中的重要作用; 2、进一步理解继承与派生的概念;3、学会通过继承派生出一个新类的方法;实验要求给出以下各实验内容的源程序代码,并把编译、运行过程中出现的问题以及解决方法填入实验报告中,按时上交。实验学时 2学时。实验内容1、声明一个人员类(Person),包括3个数据成员:name(姓名)、age(年龄)、sex(性别);2个成员函数:构造函数和输出相关信息的函数display()。利用单继承的方式声明一个学生(Student)派生类,其中增加2个数据成员:grade(年级)、score(总学分);3个成员函数:
2、构造函数、输出函数show()和增加学分的函数add()。在定义派生类对象时给出初始化的数据,然后输出这些数据。源程序#include#includeusing namespace std;class Person public: Person(string na,int ag,string se) name=na;age=ag;sex=se; void display() coutname:nameendl; coutage:ageendl; coutsex:sexendl; private: string name; int age; string sex; ;class Student
3、: public Person public: Student(string na,int ag,string se,string gr,float sc):Person(na,ag,se) grade=gr;score=sc; void show() display(); coutgrade:gradeendl; coutscore:scoreendl; void add(); private: string grade; float score; ;int main() Student stu1(小明,19,男,广告11A-2,93); stu1.show(); return 0;2、分别
4、定义教师 (Teacher)类和干部 (Cadre)类,采用多重继承方式由这两个类派生出新类:教师兼干部(Teacher_Cadre)。要求: 在两个基类中都包含姓名、性别、地址、电话等数据成员。 在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务), 在Teacher_Cadre类中还包含数据成员wages(工资)。 对两个基类中的姓名、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。 在类体中声明成员函数,在类外定义成员函数。 在派生类Teacher_Cadre的成员函数show()中调用Teacher类中的disp
5、lay()函数,输出姓名、性别、职称、地址、电话,然后再用cout语句输出职务与工资。 源程序#include#includeusing namespace std;class Teacher public: Teacher(string na,string se,string ti,string ad,long ph); void display(); protected: string name; string sex; string title; string address; long phone; ;Teacher:Teacher(string na,string se,string
6、 ti,string ad,long ph) name=na; sex=se; title=ti; address=ad; phone=ph;void Teacher:display() cout姓名:nameendl; cout性别:sexendl; cout职称:titleendl; cout地址:addressendl; cout电话:phoneendl;class Cadre public: Cadre(string na,string se,string ad,long ph,string po); void display(); protected: string name; st
7、ring sex; string address; long phone; string post;Cadre:Cadre(string na,string se,string ad,long ph,string po) name=na; sex=se; address=ad; phone=ph; post=po;void Cadre:display() cout姓名:nameendl; cout性别:sexendl; cout地址:addressendl; cout电话:phoneendl; cout职务:postendl;class TeacherCadre:public Teacher,
8、public Cadre public: TeacherCadre(string na,string se,string ad,long ph,string ti,string po,float wa):Teacher(na,se,ti,ad,ph),Cadre(na,se,ad,ph,po) wages=wa; void show(); private: float wages;void TeacherCadre : show() Teacher:display(); cout职务:postendl; cout工资:wagesendl;int main() TeacherCadre TC1(
9、小明,男,北京工商大学,66667748,硕士,教学校长,8000); TC1.show(); return 0;3、类的组合应用。现有两个类:教师(Teacher)类和日期(Date)类。其中Teacher类中包含数据成员name(姓名)、(sex)性别、(birthday)出生日期(日期类Date的子对象)、title(职称);Date类包含year(年)、month(月)、day(日)等数据成员。教授(Professor)类是Teacher类的派生类,增加教授级别(grade) 数据成员。各类中都有相应的构造函数、析构函数等成员函数。请设计各类,并在定义Professor类对象时给出所有
10、数据的初值,然后修改该对象的生日数据,最后输出该对象的全部最新数据。源程序#include#includeusing namespace std;class Date public: Date(int ye,int mo,int da) year=ye;month=mo;day=da; Date(); void display() cout出生年、月、日: year年month月day日endl; void change1(int year1,int month1,int day1) year=year1; month=month1; day=day1; protected: int year
11、; int month; int day;class Teacher public: Teacher(int ye,int mo,int da,string na,string se,string ti): birthday(ye,mo,da) name=na;sex=se;title=ti; Teacher(); void display() cout姓名: nameendl; cout性别: sexendl; cout职称: titleendl; protected: string name; string sex; Date birthday; string title; ;class
12、Professor : public Teacher public: Professor(int ye,int mo,int da,string na,string se,string ti,string gr):Teacher(ye,mo,da,na,se,ti) grade=gr; Professor(); void show() Teacher:display(); birthday.display(); cout教授级别: gradeendl; void change(int year1,int month1,int day1) birthday.change1(year1,month
13、1,day1); private: string grade; ;int main() int year1,month1,day1; Professor p1(1962,11,11,小明,男,教授,中等); cout原始数据为: endl; p1.show(); coutendl; cout year1month1day1; coutendl修改后的数据为: endl; p1.change(year1,month1,day1); p1.show(); return 0;4、在屏幕上以某一特定点为中心,画弧、画圆、画椭圆、画矩形,这些综合图形可以定义为各种图形的一个多继承派生类,而每一个图形都是
14、Point(点)类的派生类,为了使综合图形类与Point类的一个实例对应,用此实例来表达此图形的共同中心,则将Point类定义为虚基类。试设计虚基类Point(点)类,以及派生类Circle (圆)类、Rectangle(矩形)类,并用程序验证它们的功能。源程序#include #include class Pointprotected: float x; float y;public: Point(float ix, float iy): x(ix), y(iy) Point();class Circle : virtual public Pointpublic: Circle(float
15、rad,float ix,float iy): Point(ix, iy) radius=rad; Circle() void display() circle(radius, x, y); private: float radius;class Rectpublic: Rect(); Rect(int a,int b,int c,int d) left=a; top=b; right=c; bottom=d; void display() rectangle(left,top,right,bottom); Rect();protected: int left; int top; int right; int bottom;void main() int i; initgraph(640, 480); Circle ccc(100,10,100); ccc.display(); Rect rr(110,112,11,11); rr.display(); cini;
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2