实验二 类的继承与派生

合集下载

实验2继承与派生讲解

实验2继承与派生讲解

实验2 继承与派生2.1 实验目的1.熟练掌握类的继承,能够定义和使用类的继承关系。

2.掌握派生类的声明与实现方法。

3.掌握类构造函数的初始化列表与作用域分辨符的使用方法。

4.理解虚基类在解决二义性问题中的作用。

2.2 实验工具与准备工作在开始实验前,应回顾或复习相关内容。

需要一台主算机,其中安装有Visual C++ 6.0等集成开发环境软件。

2.3 实验内容1.先阅读下列程序,写出执行结果。

然后输入程序,调试程序,比较结果的正确性。

// 文件名: main.cpp#include <iostream> // 预处理命令using namespace std; // 使用标准命名空间stdclass A{public:// 公有函数:A(){ cout << "构造A" << endl; } // 构造函数~A(){ cout << "析构A" << endl; } // 析构函数};class B: public A{public:// 公有函数:B(){ cout << "构造B" << endl; } // 构造函数~B(){ cout << "析构B" << endl; } // 析构函数};class C: public B{public:// 公有函数:C(){ cout << "构造C" << endl; } // 构造函数~C(){ cout << "析构C" << endl; } // 析构函数};int main(void) // 主函数main(void){C obj; // 定义对象system("PAUSE"); // 调用库函数system( ),输出系统提示信息return 0; // 返回值0, 返回操作系统}2.先阅读下列程序,写出执行结果。

c派生类与继承实验报告

c派生类与继承实验报告

实验2 派生类与继承实验课程名:面向对象程序设计(C++)专业班级:学号::实验时间:实验地点:指导教师:二、实验内容一、构造一个类Geometry 及其派生类,该类主要实现关于几何图形的基本操作。

对于基类“几何图形”,有求面积、求体积的函数(纯虚函数),其派生类圆和矩形主要有初始化(构造函数),求面积,求周长操作,类圆的派生类圆球和圆柱有求表面积、体积操作。

试在主函数中分别定义圆、圆球、圆柱以及矩形的对象,并调用其成员函数实现其相应操作。

实验代码如下:#include<iostream>using namespace std;class Geometry{public:CircleradiumsCircle()~Circle() BallBall()~Ball() GeometryGeometry()~Geometry()GetArea()GetPerimeter()Getcolume()show()Column Column()~Column()Rectangle Rectangle() ~Rectangle()Column column(1,2,3);column.show();return 0;}运行结果:代码分析:1)首先定义基类Geometry,在定义基类的派生类Circle,Rectangle再定义以Circle,Rectangle为基类的派生类Column,以及以Circle为基类的派生类Ball;2)在定义派生类时用构造函数初始化私有成员;3)最后用类的对象来调用类函数;二、设计如下类:(1)建立一个Point类,表示平面中的一个点;建立一个Line类,表示平面中的一条线端,内含两个Point类的对象;建立Triangle类,表示一个三角形,内含三个Line类的对象构成一个三角形。

(2)设计三个类的相应的构造函数、复制构造函数,完成初始化和对象复制(3)设计Triangle类的成员函数完成三条边是否能构成三角形的检验和三角形面积计算,面积显示。

继承和派生实验报告

继承和派生实验报告

实验目的与要求:1.掌握类的继承与派生关系以及实验方法,理解类的层次结构。

2.掌握派生类构造函数初始化基类成员和对象成员的方法。

3.掌握内联函数和默认函数。

4.掌握赋值兼容原则,掌握派生类的复制构造函数和赋值运算符的定义。

实验过程及内容:1.实践教程实验二十二P81范例:定义一个继承与派生关系的类体系,在派生类中访问基类成员。

①先定义一个点类,包含x,y坐标数据成员,显示函数和计算面积的函数成员;②以点为基类派生一个圆类,增加表示半径的数据成员,重载显示和计算面积的函数;③定义一个线段类,以两个点类对象作数据成员,定义显示、求面积及长度函数,线段类采用聚合方式,因为有两个端点,不能用派生。

编程测试所定义的类体系。

本实验教程中有源码,请自行运行,体会和熟悉继承与派生的基本概念及实现方法,掌握派生类构造函数初始化基类成员和对象成员的方法等。

2. 实践教程P83编程:多层派生练习,由上题Point类和Circle类继续派生出Cylinder类。

要求计算圆柱的底面积、侧面积、全面积和体积。

请编写所有完整的成员函数,并编写主函数进行验证。

数据处理1.(1)(2)j结果报错,原因是派生类中的成员函数不能访问基类中的私有成员。

(3)在Line类中添加两个数据成员。

2. #include <iostream>#include <cmath>using namespace std;#define PI 3.14159class Point{friend class Line;protected:double x, y ;public:Point(){x = 0 ; y = 0 ; }Point(double xv,double yv){ x = xv; y = yv; }double Area(){return 0;}void Show() {cout<<"x="<<x<<' '<<"y="<<y<<endl;}};class Circle :public Point{protected:double radius;public:Circle(){ x = 0; y = 0; radius = 0; }Circle(double xv,double yv,double vv):Point(xv,yv){ //调用基类构造函数radius = vv;}Circle(Circle & cir):Point(cir){ //按赋值兼容规则cir可为Point实参radius=cir.radius;}Circle & operator=(Circle & cir){this->Point::operator=(cir); //在派生类中定义重载的拷贝赋值操作符有固定的标准格式radius=cir.radius;return *this;}double Area(){return PI*radius*radius;}void Show()cout<<"x="<<x<<' '<<"y="<<y<<" radius="<<radius<<endl; //访问基类的数据成员}};class Cylinder:public Circle {double high;public:Cylinder(){ x = 0; y = 0; radius = 0;high=0; }Cylinder(double xv,double yv,double vv,double kv):Circle(xv,yv,vv){ //调用基类构造函数high=kv;}Cylinder(Cylinder & cyl):Circle(cyl){ //按赋值兼容规则cyl可为Cylinder实参high=cyl.high;}Cylinder & operator=(Cylinder & cyl){this->Circle :: operator=(cyl); //在派生类中定义重载的拷贝赋值操作符有固定的标准格式high=cyl.high;return *this;}double ceArea(){return 2*PI*radius*high;}double quArea(){return ceArea()+2* Area();}double volume(){return Area()*high;}void Show(){cout<<"x="<<x<<' '<<"y="<<y<<' '<<"radius="<<radius<<' '<<"high="<<high<<endl; //访问基类的数据成员};class Line{Point start,end; //对象成员public:Line(){} //对象成员初始化Line(double xv1,double yv1,double xv2,double yv2) :start(xv1,yv1),end(xv2,yv2){ }double GetLength() {return sqrt((start.x-end.x)*(start.x-end.x)+(start.y-end.y)*(start.y-end.y));}double Area(){return 0;}void Show(){cout<<"start point:\n";start.Show();cout<<"end point:\n";end.Show();}};int main(){Point pt(0,0);Circle cl1(100,100,10),cl2(cl1),cl3;Cylinder h1(50,50,20,30),h2(h1),h3;Line ln1(0,0,100,100),ln2;cout<<"点面积:"<<pt.Area()<<endl;pt.Show();cout<<"cl1圆面积:"<<cl1.Area()<<endl;cl1.Show();cout<<"cl2圆面积:"<<cl2.Area()<<endl;cl2.Show();cl3=cl1;cout<<"cl3圆面积:"<<cl3.Area()<<endl;cl3.Show();cout<<"h1底面积:"<<h1.Area()<<endl;cout<<"h1侧面积:"<<h1.ceArea()<<endl;cout<<"h1全面积:"<<h1.quArea()<<endl;cout<<"h1体积:"<<h1.volume()<<endl;h1.Show();cout<<"h2底面积:"<<h2.Area()<<endl;cout<<"h2侧面积:"<<h2.ceArea()<<endl;cout<<"h2全面积:"<<h2.quArea()<<endl;cout<<"h2体积:"<<h2.volume()<<endl;h2.Show();h3=h1;cout<<"h3底面积:"<<h3.Area()<<endl;cout<<"h3侧面积:"<<h3.ceArea()<<endl;cout<<"h3全面积:"<<h3.quArea()<<endl;cout<<"h3体积:"<<h3.volume()<<endl;h3.Show();cout<<"线面积:"<<ln1. Area()<<'\t'<<"线长度:"<<ln1. GetLength()<<endl;ln1.Show();ln2.Show();return 0;}实验结论:通过这次实验,我对类的继承和派生,派生类构造函数初始化基类成员和对象成员的方法,以及赋值兼容原则有了更深的理解。

实验二 类的继承和派生

实验二 类的继承和派生

实验二类的继承和派生1.实验目的(1)掌握利用单继承和多继承的方式定义派生类的方法。

(2)深刻理解在各种继承方式下构造函数和析构函数的执行顺序。

(3)理解和掌握公有继承、私有继承和保护继承对基类成员的访问机制。

(4)理解虚基类的目的和作用。

2.实验内容(1)声明一个圆类作为基类,含成员数据半径R;有成员函数:构造函数实现对基类成员数据的初始化、计算圆面积的成员函数、输出的成员函数,要求输出圆半径R。

把圆类作为基类,通过公有继承,派生圆柱体类,派生类新增成员数据有高(H);新增成员函数有构造函数、计算圆柱体体积的函数、输出所有成员的函数。

main()完成派生类对象的定义和相关函数的测试。

(2)声明一个学生类,有成员函数:学号、姓名、性别、年龄,要求有如下成员函数:构造函数,输出所有成员的函数。

声明一个课程类,有成员数据:课程编号、课程名称、学时数,要求有如下成员函数:构造函数,输出所有成员的函数。

将学生类和课程类作为基类,通过公有继承,派生选课类,派生类新增成员数据有:成绩;新增成员函数有:构造函数,输出所有成员的函数。

main()完成派生类对象的定义和相关函数的测试。

(3)设计一个汽车类Vehicle,包含数据成员车轮和重量,由它派生出类Car 和类Truck,前者包含载客数,后者包含载重量。

编写程序实现。

3.实验要求(1)独立完成实验。

(2)实验前需先预先浏览实验指导书,编好源程序。

(3)实验过程中尽量独立思考,培养分析问题和解决问题的能力。

(4)实验完毕后书写实验报告,实验报告内容包括:实验内容、结果分析以及本次实验的心得体会。

要求将程序源代码和运行时的输入输出数据情况书写在实验内容部分,并对程序的输出结果进行分析,说明为什么能得出相应的结果(如果不能输出预期结果,需要分析说明其原因)。

南邮java实验二类继承

南邮java实验二类继承
return width;
}
public void setLength(int length) {
this.length = length;
}
public void setWidth(int Width) {
this.width = Width;
}
public int getArea() {
return width * length;
}
}
一开始遇到问题是calendar类型变量ca的值的设置为ca.set(1999,9,9),结果月份是8,后来发现月份是从0-11的。另外发现对ca设置值还有一个麻烦一些的方法:SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
MyRectangle rect = new MyRectangle(6, 5);
System.out.println("length=" + rect.getLength() + ",width=" + rect.getWidth() + ",area=" + rect.getArea());
rect.setLength(9);
2018学年课程名称java程序设计实验名称类继承实验时间2017指导单位计算机学院软件学院软件工程系指导教师肖欣欣学生姓名班级学号b16041309学院系实验名称类继承指导教师肖欣欣实验类型上机实验学时实验时间2017年12月15掌握派生类的定义二实验环境实验设备计算机需安装好jdk和eclipse三实验内容将编译运行成功后代码写入题目空白处1定义一个类myrectangle代表矩形

实验二类的继承与派生

实验二类的继承与派生

实验二类的继承与派生实验二类的继承与派生一、实验目的1. 掌握类的声明和使用。

2. 掌握对象的声明和使用。

3. 掌握具有不同访问属性的成员的访问方式。

4. 观察构造函数和析构函数的执行过程。

5. 学习声明和使用类的继承关系,声明派生类;6. 熟悉不同继承方式下对基类成员的访问控制;二.实验内容1. 设计一个用于人事管理的People(人员)类。

考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号)、sex (性别)、birthday(出生日期)、id(身份证号)等等。

具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号charid[20]。

其中“出生日期”声明为一个“日期”类内嵌子对象。

用成员函数实现对人员信息的录入和显示。

要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、组合。

在测试程序中声明people 类的对象数组,录入数据并显示。

2. 从people(人员)类派生出student(学生)类,添加属性:班号char classNO[7];从people 类派生出teacher(教师)类,添加属性:职务char pship[11]、部门char departt[21]。

从student 类中派生出graduate(研究生)类,添加属性:专业char subject[21]、导师teacher adviser;从graduate 类和teacher 类派生出TA(助教博士生)类,重载相应的成员函数,测试这些类。

三 . 实验步骤1.程序代码第一题#include#includeusing namespace std;class Date //日期类{private:int year;int month;int day;public:Date(){} //默认构造Date(int y,int m,int d) //带参构造{year=y;month=m;day=d;}void set() //设置数据函数{cin>>year>>month>>day;}void display() //显示函数{cout<<year<<"年"<<month<<"月"<<day<<"日";< bdsfid="103" p=""></year<<"年"<<month<<"月"<<day<<"日";<>}};class Person //人员类{private:string name;int num;char sex;Date birthday;char ID[18];public:Person(){} //默认构造Person(int n,int y,int m,int d,char id[18],char s='m'):birthday(y,m,d) {num=n;sex=s;strcpy(ID,id);} //有默认值的带参构造Person(Person& p) //拷贝构造{ name=;num=p.num;sex=p.sex;birthday=p.birthday;strcpy(ID,p.ID);}void input() //输入函数{cout<<"录入数据:"<<endl;< bdsfid="131" p=""></endl;<> cout<<"姓名:";cin>>name;cout<<"编号:";cin>>num;cout<<"性别(m/f):";cin>>sex;cout<<"生日:";birthday.set();cout<<"身份证号:";cin>>ID;ID[18]='\0';cout<<endl;< bdsfid="144" p=""></endl;<>}void output() //输出函数{cout<<"编号:"<<num<<endl;< bdsfid="149" p=""></num<<endl;<>cout<<"姓名:"<<name<<endl;< bdsfid="151" p=""></name<<endl;<>cout<<"性别:"<<sex<<endl;< bdsfid="153" p=""></sex<<endl;<>cout<<"生日:";birthday.display();cout<<endl;< bdsfid="157" p=""></endl;<>cout<<"身份证号:"<<id<<endl;< bdsfid="159" p=""></id<<endl;<>}~Person() //析构函数{cout<<" "<<num<<"号人员已经录入"<<=""></num<<"号人员已经录入"<};int main(){Person p1;p1.input();p1.output();return 0;}第二题#include#includeusing namespace std;class Date //日期类{private:int year;int month;int day;public:Date(){} //默认构造Date(int y,int m,int d) //带参构造{year=y;month=m;day=d;}void set() //设置数据函数{cin>>year>>month>>day;}void display() //显示函数{cout<<year<<"年"<<month<<"月"<<day<<"日";< bdsfid="200" p=""></year<<"年"<<month<<"月"<<day<<"日";<>}};class Person //人员类{private:string name;int num;char sex[10];Date birthday;char ID[18];public:Person(){} //默认构造Person(int n,int y,int m,int d,char id[18],char sex[10]):birthday(y,m,d) {num=n;strcpy(ID,id);} //有默认值的带参构造Person(Person& p) //拷贝构造{ name=;num=p.num;birthday=p.birthday;strcpy(ID,p.ID);}void input() //输入函数{cout<<"姓名:";cin>>name;cout<<"编号:";cin>>num;cout<<"性别(男/女):";cin>>sex;cout<<"生日:";birthday.set();cout<<"身份证号:";cin>>ID;ID[18]='\0';cout<<endl;< bdsfid="237" p=""></endl;<>}void output() //输出函数{cout<<"编号:"<<num<<endl;< bdsfid="242" p=""></num<<endl;<>cout<<"姓名:"<<name<<endl;< bdsfid="244" p=""></name<<endl;<>cout<<"性别:"<<sex<<endl;< bdsfid="246" p=""></sex<<endl;<>cout<<"生日:";birthday.display();cout<<endl;< bdsfid="250" p=""></endl;<>cout<<"身份证号:"<<id<<endl;< bdsfid="252" p=""></id<<endl;<>}~Person() //析构函数{//cout<<" "<<num<<"号人员已经录入"<<=""></num<<"号人员已经录入"<};class stduent:public Person{char classno[7];public: student(){cout<<"*************"<<="">void input(){Person::input();cout<<"输入学号"<<endl;< bdsfid="269" p=""></endl;<>cin>>classno;}void getno(){Person::output();cout<<"学号为:"<<classno<<endl;< bdsfid="275" p=""></classno<<endl;<>}};class teacher:public Person{char pship[11],departt[21];public :teacher(){cout<<"***********"<<endl;}< bdsfid="283" p=""></endl;}<> void input(){Person::input();cout<<"输入职务"<<endl;< bdsfid="288" p=""></endl;<>cin>>pship;cout<<"输入部门"<<endl;< bdsfid="291" p=""></endl;<>cin>>departt;}void inputt(){cout<<"输入职务"<<endl;< bdsfid="297" p=""></endl;<>cin>>pship;cout<<"输入部门"<<endl;< bdsfid="300" p=""></endl;<>cin>>departt;}void getno(){Person::output();cout<<"职务为:"<<pship<<endl;< bdsfid="306" p=""></pship<<endl;<>cout<<"部门为:"<<departt<<endl;< bdsfid="308" p=""></departt<<endl;<>}void output (){cout<<"职务为:"<<pship<<endl;< bdsfid="313" p=""></pship<<endl;<>cout<<"部门为:"<<departt<<endl;< bdsfid="315" p=""></departt<<endl;<>}};class graduate:public stduent{char subject[21], adviser[21];public :graduate(){cout<<""<<endl;< bdsfid="323" p=""></endl;<>}void input(){stduent::input();cout<<"输入专业:"<<endl;< bdsfid="329" p=""></endl;<> cin>>subject;cout<<"输入导师:"<<endl;< bdsfid="332" p=""></endl;<>cin>>adviser;}void getno(){ stduent::getno();cout<<"专业为:"<<subject<<endl;< bdsfid="338" p=""></subject<<endl;<>cout<<"导师为:"<<adviser<<endl;< bdsfid="340" p=""></adviser<<endl;<>}};class TA :public graduate,teacher{public :TA(){}void input(){graduate::input();teacher::inputt();}void getno(){graduate::getno();teacher::output();}};int main(){Person p1;stduent s;teacher t;graduate g;TA T;cout<<"请依次输入人员数据信息"<<endl;< bdsfid="366" p=""></endl;<>p1.input();cout<<"请输入学生数据信息";s.input();cout<<"请输入老师数据信息";t.input();cout<<"请输入研究生数据信息";g.input();cout<<"请输入助教博士数据信息";T.input();cout<<"人员数据信息为:";p1.output();cout<<"学生数据信息为:";s.getno();cout<<"老师信息为:";t.getno();cout<<"研究生信息为:";g.getno();cout<<"助教博士信息为:"T.getno();}2.调试程序第一次调试,发现没有名字的显示。

实验报告-类的派生与继承

实验报告-类的派生与继承
d.display();
return 0;
}
4.模拟银行ATM终端系统,ATM机上可以使用储蓄卡和信用卡。储蓄卡有存钱、取钱、查询余额、修改密码等功能。信用卡有存钱、查询额度、查询本期账单金额、查询未出账单总金额、修改密码等功能。请用面向对象方法编程实现上述功能。
#include<iostream>
{
return weight;
}
void setWheels(int ws)
{
wheels = ws;
}
void setWeight(float wt)
{
weight = wt;
}
void display()
{
cout << "车轮数:" << wheels << "汽车承重:" << weight << endl;
cout << "请输入部门:";
cin >> bumen;
}
void display()
{
user::display();
cout << " 职称:" << zhicheng << " 部门:" << bumen << endl;
}
private:
char zhicheng[20];
char bumen[20];
cin >> hour;
sumsalary = salary + 5 * hour;
}
void display()

继承与派生实验报告

继承与派生实验报告

继承与派生实验报告继承与派生实验报告引言:继承与派生是面向对象编程中的重要概念,通过继承,一个类可以派生出子类,从而实现代码的复用和扩展。

本文将通过实验来探讨继承与派生的概念、原理和应用。

实验目的:1. 理解继承与派生的概念和原理;2. 掌握如何在编程语言中实现继承和派生;3. 熟悉继承与派生的应用场景。

实验步骤:1. 创建父类:首先,我们创建一个名为"Animal"的父类,该类具有属性和方法,例如"age"和"eat()"。

2. 创建子类:接下来,我们创建一个名为"Cat"的子类,该类继承自"Animal"类。

在子类中,我们可以重写父类的方法或添加新的方法。

3. 实例化对象:通过实例化父类和子类的对象,我们可以调用它们的方法和访问它们的属性。

4. 测试继承与派生:我们可以通过调用父类和子类的方法,观察它们的行为是否符合预期。

实验结果:在创建父类"Animal"时,我们定义了一个"age"属性和一个"eat()"方法。

在创建子类"Cat"时,我们继承了父类的属性和方法,并添加了一个新的"meow()"方法。

在实例化父类对象时,我们可以通过调用"eat()"方法来模拟动物进食的行为。

而在实例化子类对象时,我们既可以调用从父类继承而来的"eat()"方法,也可以调用子类特有的"meow()"方法来模拟猫咪的叫声。

通过实验,我们发现继承与派生的优势在于代码的复用和扩展。

我们只需在父类中定义一次通用的属性和方法,然后让不同的子类继承父类,即可实现代码的复用。

同时,子类还可以通过重写父类的方法或添加新的方法,实现代码的扩展和个性化。

讨论与应用:继承与派生不仅仅局限于上述的父类和子类关系,它还可以在多层次的继承结构中发挥作用。

C++继承与派生实验报告

C++继承与派生实验报告

C++继承与派生实验报告应用数学学院信息与计算科学(信息计算)专业1 班、学号3111008106姓名吴伟栓教师评定_________________实验题目继承与派生一、实验目的与任务实验目的:(1)学习声明和使用类的继承关系,声明派生类。

(2)熟悉不同继承方式下对基类成员的访问控制。

(3)学习利用虚基类解决二义性问题。

实验任务:(1)声明一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。

(2)声明一个基类BaseClass,有整形成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。

(3)声明一个车(vehicle)基类,具有MaxSpeed,Weight等成员变量,Run,Stop 等成员函数,由此派生出自行车(bicycle)类,汽车(motorcar)类。

自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。

从bicycle 和motorcar派生出摩托车(motocycle)类,在继承过程中,注意把vehicle设置为虚基类。

如果不把vehicle设置为虚基类,会有什么问题?编程试试看。

(4)(选做)从实验六中的people(人员)类派生出student(学生)类,添加属性:班号char classNo[7];从people类派生出teacher(教师)类,添加属性:职务char principalship[11]、部门char department[21]。

从student类中派生出graduate(研究生)类,添加属性:专业char subject[21]、导师teacherradviser;从graduate类和teacher 类派生出TA(助教生)类,注意虚基类的使用。

实验二 类及类的继承

实验二 类及类的继承

C++与数据结构实验指导书实验二类及类的继承一、实验目的1、熟悉并掌握类的概念及定义类的格方法;2、掌握类对象的定义;3、掌握构造函数和析构函数的含义与作用以及定义方式和实现方法;4、理解继承的含义,掌握派生类的定义方法和实现;5、理解多继承的概念及多继承中构造与析构的应用。

二、实验内容1、定义一个学生类,数据成员有学号、姓名、年龄,并使用成员函数实现如下功能:(1)使用成员函数实现输入、输出;(2)使用构造函数和析构函数实现对数据的输入、输出;编写主函数使用这个类,实现对学生数据的赋值和输出。

#include<iostream>#include<string>using namespace std;class student{private:int number;string name;int age;public:student(int a,string b,int c){number=a;name=b;age=c;cout<<"学号:"<<number<<" 姓名:"<<name<<" 年龄:"<<age<<endl;}~student(){cout<<"学号:"<<number<<" 姓名:"<<name<<" 年龄:"<<age<<" Destructed."<<endl;}};int main(){student s1(1412010708,"雷宇",20);student s2(1412010709,"李嘉锡",18);student s3(1412010710,"刘奇瑞",19);return 0;}2、定义日期类Date。

实验二继承机制实验报告

实验二继承机制实验报告

浙江理工大学信息学院实验指导书实验名称:类得继承机制得实现学时安排:3实验类别:设计性实验实验要求:1人1组学号: 姓名 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄一、实验目得1、掌握单继承与多重继承得概念。

2、理解不同得继承类型:public、protected与private,掌握何时使用何种继承类型。

3、掌握类层次中构造函数得定义方式与建立对象时构造与析构次序二、实验原理介绍通过继承机制实现对类功能得扩展,合理设计派生类得构造函数、成员函数。

三、实验设备介绍软件需求: windows或linux下得c++编译器硬件需求:对于硬件方面得要求,建议配置就是Pentium III 450以上得CPU处理器,64MB以上得内存,200MB得自由硬盘空间、CD-ROM驱动器、能支持24位真彩色得显示卡、彩色显示器、打印机。

四、实验内容实现对第一次实验结果Elevator类得功能扩展。

在Elevator类已有功能得基础上派生AdvancedElevator类。

AdvancedElevator类可以实现当多人在不同楼层等待乘坐上行或下行得同一部电梯时,能够合理得根据乘坐人得需求对电梯经停得楼层进行排序。

要求:1、为了实现上得方便性,我们假设同一组要求乘坐电梯得乘客或者都就是上行,或者都就是下行。

2、在主函数中对该类得功能进行测试,测试方法就是首先选择在某一时间段一组要乘坐电梯得乘客就是上行还就是下行,然后输入组中乘客得人数及每一个乘客所在楼层与目得楼层,由AdvancedElevator类实例化后得电梯对象在运作得过程中,如果电梯就是上行,则能根据乘客所在得楼层与目得楼层从下向上依次停靠;如果电梯就是下行,则能根据乘客所在得楼层与目得楼层从上向下依次停靠.3、在测试得过程中,还需要注意测试当多个用户在同一楼层或多个用户得目得楼层为同一楼层时情况得处理.提示:为了方便描述乘客,我们可以定义一个Person类,主要描述每一个乘客所在楼层与目得楼层。

实验2 派生类与继承.doc

实验2 派生类与继承.doc

实验2 派生类与继承实验课程名:面向对象程序设计(C++)专业班级:计算机应用技术学号: 201130410115 姓名:熊柳强实验时间: 2012-10-9 实验地点: k4-207 指导教师:谢晋一、实验目的和要求(1) 掌握派生类的声明方法和派生类构造函数的定义方法。

(2) 掌握不同继承方式下,基类成员在派生类中的访问属性。

(3) 掌握在继承方式下,构造函数与析构函数的执行顺序与构造规则。

(4) 学习虚基类在解决二义性问题中的作用。

二、实验内容1、源程序代码://test4_1.cpp#include<iostream>using namespace std;class Base{public:void setx(int i){x=i;}int getx(){return x;}public:int x;};class Derived:public Base{public:void sety(int i){y=i;}int gety(){return y;}void show(){cout<<"Base::x="<<x<<endl;}public:int y;};int main(){Derived bb;bb.setx(16);bb.sety(25);bb.show();cout<<"Base::x="<<bb.x<<endl;cout<<"Derived::y="<<bb.y<<endl;cout<<"Base::x="<<bb.getx()<<endl;cout<<"Derived::y="<<bb.gety()<<endl;return 0;}运行结果:(1)写出程序的运行结果。

实验二 继承和派生

实验二  继承和派生

实验二运算符重载、继承和派生【实验目的】1、掌握继承的概念。

2、理解派生类与基类的关系。

3、理解不同的继承类型。

4、掌握继承下的构造函数和析构函数。

5、掌握单继承和多继承使用方法。

6、理解重载运算符的意义。

7、掌握用成员函数、友元函数重载运算符的特点。

8、掌握重载运算符函数的调用方法。

【实验内容】1、上机分析下面程序,掌握运算符重载的方法。

#include <iostream.h>class Complex{friend Complex operator+( const double &d, const Complex &c );friend Complex operator-( const double &d, const Complex &c );double m_fReal, m_fImag;public:Complex( const double &r = 0, const double &i = 0): m_fReal( r ), m_fImag( i ){}Complex( const Complex &c ): m_fReal( c.m_fReal ), m_fImag( c.m_fImag ){}double GetReal() const{return m_fReal;}double GetImag() const{return m_fImag;}Complex& operator=( const Complex &c ){if( this == &c ){return *this;}m_fReal=c.m_fReal;m_fImag=c.m_fImag;return *this;}Complex operator+( const Complex &c ){return Complex( m_fReal+c.m_fReal, m_fImag+c.m_fImag );}Complex operator-( const Complex &c ){return Complex( m_fReal-c.m_fReal, m_fImag-c.m_fImag );}Complex operator+( const double &d ){return Complex( m_fReal+d, m_fImag );}Complex operator-( const double &d ){return Complex( m_fReal-d, m_fImag );}};Complex operator+( const double &d, const Complex &c ){return Complex( d + c.m_fReal, c.m_fImag );}Complex operator-( const double &d, const Complex &c ){return Complex( d - c.m_fReal, c.m_fImag );}int main(){Complex c1( 3.3, 4.4 );Complex c2( 5.5, 2.2 );Complex c3;c3 = c1 + c2;cout << "C3 = " << c3.GetReal() << "+i" << c3.GetImag() << endl;c3 = c1 - c2;cout << "C3 = " << c3.GetReal() << "+i" << c3.GetImag() << endl;c3 = c1 + c2;cout << "C3 = " << c3.GetReal() << "+i" << c3.GetImag() << endl;c3 = c1 + 1.1;cout << "C3 = " << c3.GetReal() << "+i" << c3.GetImag() << endl;c3 = c1 - 1.1;cout << "C3 = " << c3.GetReal() << "+i" << c3.GetImag() << endl;c3 = 9.9 + c1;cout << "C3 = " << c3.GetReal() << "+i" << c3.GetImag() << endl;c3 = 9.9 - c1;cout << "C3 = " << c3.GetReal() << "+i" << c3.GetImag() << endl;( c3 = c1 ) = c2;cout << "C3 = " << c3.GetReal() << "+i" << c3.GetImag() << endl;return 0;}2、上机分析下面程序,理解继承的概念。

c 派生类与继承实验报告

c 派生类与继承实验报告

实验2 派生类与继承实验课程名:面向对象程序设计(C++)专业班级:学号:姓名:实验时间:实验地点:指导教师:二、实验内容一、构造一个类Geometry 及其派生类,该类主要实现关于几何图形的基本操作。

对于基类“几何图形”,有求面积、求体积的函数(纯虚函数),其派生类圆和矩形主要有初始化(构造函数),求面积,求周长操作,类圆的派生类圆球和圆柱有求表面积、体积操作。

试在主函数中分别定义圆、圆球、圆柱以及矩形的对象,并调用其成员函数实现其相应操作。

实验代码如下:#include<iostream>using namespace std;class Geometry{public:CircleradiumsCircle()~Circle() BallBall()~Ball() GeometryGeometry()~Geometry()GetArea()GetPerimeter()Getcolume()show()Column Column()~Column()Rectangle Rectangle() ~Rectangle()Column column(1,2,3);column.show();return 0;}运行结果:代码分析:1)首先定义基类Geometry,在定义基类的派生类Circle,Rectangle再定义以Circle,Rectangle为基类的派生类Column,以及以Circle为基类的派生类Ball;2)在定义派生类时用构造函数初始化私有成员;3)最后用类的对象来调用类函数;二、设计如下类:(1)建立一个Point类,表示平面中的一个点;建立一个Line类,表示平面中的一条线端,内含两个Point类的对象;建立Triangle类,表示一个三角形,内含三个Line类的对象构成一个三角形。

(2)设计三个类的相应的构造函数、复制构造函数,完成初始化和对象复制(3)设计Triangle类的成员函数完成三条边是否能构成三角形的检验和三角形面积计算,面积显示。

C 继承与派生实验报告

C 继承与派生实验报告

C 继承与派生实验报告1. 引言继承与派生是面向对象编程中的基本概念之一,C语言作为一门面向过程的编程语言,也支持继承与派生的概念。

本实验旨在通过编写代码演示C语言中的继承与派生的使用方法,加深对这一概念的理解。

2. 继承与派生的概念继承是一种面向对象编程中的重要概念,通过继承,派生类可以继承基类的属性和方法。

在C语言中,继承是通过结构体嵌套的方式实现的。

派生是继承的一种特殊形式,通过派生,派生类可以在基类的基础上增加新的属性和方法。

3. 实验步骤步骤一:定义基类首先,我们需要定义一个基类,基类包含一些公共的属性和方法。

在C语言中,我们可以使用结构体来定义类。

typedef struct {int x;int y;} Point;上述代码定义了一个名为Point的结构体,它包含了两个整型属性x和y。

这个结构体可以看作是基类。

步骤二:定义派生类接下来,我们可以定义派生类,派生类通过嵌套包含基类的结构体来实现继承。

typedef struct {Point base; // 基类结构体int z; // 派生类自己的属性} Point3D;上述代码定义了一个名为Point3D的结构体,它嵌套包含了基类Point的结构体,并新增了一个整型属性z。

这个结构体可以看作是派生类。

步骤三:使用派生类在定义好派生类后,我们可以使用派生类来创建对象,并调用基类的属性和方法。

int main() {// 创建对象Point3D point3d;point3d.base.x = 1;point3d.base.y = 2;point3d.z = 3;// 调用基类属性printf("x: %d\n", point3d.base.x);printf("y: %d\n", point3d.base.y);// 调用派生类自己的属性printf("z: %d\n", point3d.z);return0;}上述代码示例了如何使用派生类创建对象,并访问基类的属性和派生类自己的属性。

实验二 类的继承与派生

实验二  类的继承与派生

实验二类的继承与派生一、实验目的1. 掌握类的声明和使用。

2. 掌握对象的声明和使用。

3. 掌握具有不同访问属性的成员的访问方式。

4. 观察构造函数和析构函数的执行过程。

5. 学习声明和使用类的继承关系,声明派生类;6. 熟悉不同继承方式下对基类成员的访问控制;二.实验内容1. 设计一个用于人事管理的People(人员)类。

考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。

具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号charid[20]。

其中“出生日期”声明为一个“日期”类内嵌子对象。

用成员函数实现对人员信息的录入和显示。

要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、组合。

在测试程序中声明people 类的对象数组,录入数据并显示。

2. 从people(人员)类派生出student(学生)类,添加属性:班号char classNO[7];从people 类派生出teacher(教师)类,添加属性:职务char pship[11]、部门char departt[21]。

从student 类中派生出graduate(研究生)类,添加属性:专业char subject[21]、导师teacher adviser;从graduate 类和teacher 类派生出TA(助教博士生)类,重载相应的成员函数,测试这些类。

三 . 实验步骤1.程序代码第一题#include <iostream>#include <string>using namespace std;class Date //日期类{private:int year;int month;int day;public:Date(){} //默认构造Date(int y,int m,int d) //带参构造{year=y;month=m;day=d;}void set() //设置数据函数{cin>>year>>month>>day;}void display() //显示函数{cout<<year<<"年"<<month<<"月"<<day<<"日";}};class Person //人员类{private:string name;int num;char sex;Date birthday;char ID[18];public:Person(){} //默认构造Person(int n,int y,int m,int d,char id[18],char s='m'):birthday(y,m,d) {num=n;sex=s;strcpy(ID,id);} //有默认值的带参构造Person(Person& p) //拷贝构造{ name=;num=p.num;sex=p.sex;birthday=p.birthday;strcpy(ID,p.ID);}void input() //输入函数{cout<<"录入数据:"<<endl;cout<<"姓名:";cin>>name;cout<<"编号:";cin>>num;cout<<"性别(m/f):";cin>>sex;cout<<"生日:";birthday.set();cout<<"身份证号:";cin>>ID;ID[18]='\0';cout<<endl;}void output() //输出函数{cout<<"编号:"<<num<<endl;cout<<"姓名:"<<name<<endl;cout<<"性别:"<<sex<<endl;cout<<"生日:";birthday.display();cout<<endl;cout<<"身份证号:"<<ID<<endl;}~Person() //析构函数{cout<<" "<<num<<"号人员已经录入"<<endl; }};int main(){Person p1;p1.input();p1.output();return 0;}第二题#include <iostream>#include <string>using namespace std;class Date //日期类{private:int year;int month;int day;public:Date(){} //默认构造Date(int y,int m,int d) //带参构造{year=y;month=m;day=d;}void set() //设置数据函数{cin>>year>>month>>day;}void display() //显示函数{cout<<year<<"年"<<month<<"月"<<day<<"日";}};class Person //人员类{private:string name;int num;char sex[10];Date birthday;char ID[18];public:Person(){} //默认构造Person(int n,int y,int m,int d,char id[18],char sex[10]):birthday(y,m,d) {num=n;strcpy(ID,id);} //有默认值的带参构造Person(Person& p) //拷贝构造{ name=;num=p.num;birthday=p.birthday;strcpy(ID,p.ID);}void input() //输入函数{cout<<"姓名:";cin>>name;cout<<"编号:";cin>>num;cout<<"性别(男/女):";cin>>sex;cout<<"生日:";birthday.set();cout<<"身份证号:";cin>>ID;ID[18]='\0';cout<<endl;}void output() //输出函数{cout<<"编号:"<<num<<endl;cout<<"姓名:"<<name<<endl;cout<<"性别:"<<sex<<endl;cout<<"生日:";birthday.display();cout<<endl;cout<<"身份证号:"<<ID<<endl;}~Person() //析构函数{//cout<<" "<<num<<"号人员已经录入"<<endl; }};class stduent:public Person{char classno[7];public: student(){cout<<"*************"<<endl; }void input(){Person::input();cout<<"输入学号"<<endl;cin>>classno;}void getno(){Person::output();cout<<"学号为:"<<classno<<endl;}};class teacher:public Person{char pship[11],departt[21];public :teacher(){cout<<"***********"<<endl;}void input(){Person::input();cout<<"输入职务"<<endl;cin>>pship;cout<<"输入部门"<<endl;cin>>departt;}void inputt(){cout<<"输入职务"<<endl;cin>>pship;cout<<"输入部门"<<endl;cin>>departt;}void getno(){Person::output();cout<<"职务为:"<<pship<<endl;cout<<"部门为:"<<departt<<endl;}void output (){cout<<"职务为:"<<pship<<endl;cout<<"部门为:"<<departt<<endl;}};class graduate:public stduent{char subject[21], adviser[21];public :graduate(){cout<<""<<endl;}void input(){stduent::input();cout<<"输入专业:"<<endl;cin>>subject;cout<<"输入导师:"<<endl;cin>>adviser;}void getno(){ stduent::getno();cout<<"专业为:"<<subject<<endl;cout<<"导师为:"<<adviser<<endl;}};class TA :public graduate,teacher{public :TA(){}void input(){graduate::input();teacher::inputt();}void getno(){graduate::getno();teacher::output();}};int main(){Person p1;stduent s;teacher t;graduate g;TA T;cout<<"请依次输入人员数据信息"<<endl;p1.input();cout<<"请输入学生数据信息";s.input();cout<<"请输入老师数据信息";t.input();cout<<"请输入研究生数据信息";g.input();cout<<"请输入助教博士数据信息";T.input();cout<<"人员数据信息为:";p1.output();cout<<"学生数据信息为:";s.getno();cout<<"老师信息为:";t.getno();cout<<"研究生信息为:";g.getno();cout<<"助教博士信息为:"T.getno();}2.调试程序第一次调试,发现没有名字的显示。

[C++]继承和派生实验报告

[C++]继承和派生实验报告

运行结果:修改过后的程序代码如下:#include <iostream>#include <cstring>using namespace std;class Person{private: char m_strName[20];int m_nAge;int m_nSex;public: Person();//构造函数Person( char *name, int age, char sex ); //构造函数Person( const Person &p ); //拷贝构造函数~Person() //析构函数{cout<<"Now destroying the instance of Person"<<endl;}void SetName( char *name );void SetAge( int age );void setSex( char sex );char* GetName();运行结果:2. 程序的类结构图为:A-x:int+A()+A( int m ) : x( m )+~A()B-A a-y:int+B()+B( int m, int n, int l ) : A( m ), a( n ),y( l )+~B()运行结果:3.程序的类结构图为:Person#m_name[20]:char#m_age:int#m_sex:char+Person()+information(char* name,int age,char sex):void+~Person()Teacher#major[20]: char#position[20]: char#course[20]: char+m_major(char* m): void+m_position(char* p):void+m_course(char* c): voidcout<<'['<<x_size<<","<<y_size<<']'<<", "<<'['<<i_size<<","<<j_size<<']'; }int main(){Circle1 circle(0.0,0.0,3.0);circle.area();circle.perimeter();circle.print();cout<<"\n";Square1 square(0.0,0.0,3.0,3.0);square.area();square.perimeter();square.print();cout<<"\n";cout<<"圆的面积为:"<<circle.area()<<endl;cout<<"圆的周长为:"<<circle.perimeter()<<endl;cout<<"圆的圆心坐标和半径为:";circle.print();cout<<"\n\n";cout<<"正方形的面积为:"<<square.area()<<endl;cout<<"正方形的周长为:"<<square.perimeter()<<endl;cout<<"正方形的中心坐标和一个顶点坐标分别为:";square.print();cout<<"\n";return 0;}运行结果:。

湖北理工(黄石理工)C 实验 实验二派生类与继承

湖北理工(黄石理工)C  实验 实验二派生类与继承
(2)按以下要求,对程序进行修改后再调试,指出调试中出错的原因。 ①将基类 Base 中数据成员 x 的访问权限改为 private 时,会出现哪些错误?为什么?
答:出现的错误如下:
原因是将基类 Base 中数据成员 x 的访问权限改为 private 后,X 在公有派生类中的访问属 性为不可被直接访问。
cout<<"error length"; exit(1); } alist=new int [leng]; length=leng; if(alist==NULL) { cout<<"assign failure"; exit(1); } cout<<"MyArray 类对象已创建。"<<endl; } MyArray::~MyArray() { delete[] alist; cout<<"MyArray 类对象被撤销。"<<endl; } void MyArray::Display(string str) { int i; int *p=alist; cout<<str<<length<<"个整数:"; for(i=0;i<length;i++,p++) cout<<*p<<" ";
cout<<endl; } void MyArray::Input() {
cout<<"请键盘输入"<<length<<"个整数:"; int i; int *p =alist; for(i=0;i<length;i++,p++) cin>>*p; } int main() { MyArray a(5); a.Input(); a.Display("显示已输入的"); return 0; } 实验运行结果:

C++程序设计实验 类的继承和派生

C++程序设计实验  类的继承和派生

《C++程序设计》实验报告准考证号xxxxxx题目:类的继承和派生姓名xxx 日期xxx实验环境:Visual c++6.0实验内容与完成情况实验目的:1,理解继承派生的概念2,掌握派生类的定义,熟练定义派生类及其构造函数、析构函数3,理解继承派生中可能存在的问题实验内容:1,完成基类的定义定义person类,其属性有姓名name、年龄age、性别sex定义相关构造函数、析构函数,提供不同的构造函数以不同方式构造对象定义showperson函数显示相关信息定义setperson函数存入相关信息2,定义派生类student其属性增加:学号ID、年级grade、班级clas定义相关构造函数、析构函数,提供不同的构造函数以不同方式构造对象定义showstudent函数显示对象的所有信息定义setstudent函数存入相关信息3,定义派生类teacher其属性增加:工号ID、职务position、部门department定义相关构造函数、析构函数,提供不同的构造函数以不同方式构造对象定义showteacher函数显示对象的所有信息定义setteacher函数存入相关信息4,设计main函数创建对象,测试派生类对象产生时,构造函数调用过程派生类对象释放时,析构函数调用过程并输出结果源程序代码:#include<iostream>#include<string>using namespace std;class person{protected:string name,sex;int age;public:person(string a="未命名",int b=0,string c="未知"){name=a;age=b;sex=c;}void setperson(string a,int b,string c);void showperson();~person(){cout<<"析构"<<name<<endl;}};void person::setperson(string a,int b,string c){name=a;age=b;sex=c;}void person::showperson(){cout<<"姓名:"<<name<<"\t年龄:"<<age<<"\t性别:"<<sex<<endl;}class student:public person{string ID,grade,clas;public:student(string a="未命名",int b=0,string c="未知",string d="0000",string e="未知",string f="未知"):person(a,b,c){ID=d;grade=e;clas=f;}void showstudent();void setstudent(string a,int b,string c,string d,string e,string f);~student(){cout<<"析构"<<name<<endl;}};void student::showstudent(){person::showperson();cout<<"学号:"<<ID<<"\t年级:"<<grade<<"\t班级:"<<clas<<endl;}void student::setstudent(string a,int b,string c,string d,string e,string f){setperson(a,b,c);ID=d;grade=e;clas=f;}class teacher:public person{string ID,position,department;public:teacher(string a="未命名",int b=0,string c="未知",string d="无",string e="未知",string f="未知"):person(a,b,c){ID=d;position=e;department=f;}void showteacher();void setteacher(string a,int b,string c,string d,string e,string f);~teacher(){cout<<"析构"<<name<<endl;}};void teacher::showteacher(){person::showperson();cout<<"工号:"<<ID<<"\t职务:"<<position<<"\t部门:"<<department<<endl;}void teacher::setteacher(string a,int b,string c,string d,string e,string f){setperson(a,b,c);ID=d;position=e;department=f;}void main(){person a1("张三",15,"男");a1.showperson();person a2("小三");a2.showperson();person b;string h,j;int i;cout<<"请输入:"<<endl;cout<<"姓名:";cin>>h;cout<<"年龄:";cin>>i;cout<<"性别:";cin>>j;b.setperson(h,i,j);b.showperson();student c1("王五",16,"男","1001","10级","二班");c1.showstudent();student c2("小五",16,"男");c2.showstudent();student d;string k,l,m;cout<<"请输入:"<<endl;cout<<"姓名:";cin>>h;cout<<"年龄:";cin>>i;cout<<"性别:";cin>>j;cout<<"学号:";cin>>k;cout<<"年级:";cin>>l;cout<<"班级:";cin>>m;d.setstudent(h,i,j,k,l,m);d.showstudent();teacher e1("赵六",33,"男","2002","教授","计算机学院");e1.showteacher();teacher e2("小刘",33,"男");e2.showteacher();teacher f;string n,o,p;cout<<"请输入:"<<endl;cout<<"姓名:";cin>>h;cout<<"年龄:";cin>>i;cout<<"性别:";cin>>j;cout<<"工号:";cin>>n;cout<<"职务:";cin>>o;cout<<"部门:";cin>>p;f.setteacher(h,i,j,n,o,p);f.showteacher();}输出结果:出现的问题:解决方案(列出遇到的问题和解决办法,列出没有解决的问题)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二类的继承与派生一、实验目的1. 掌握类的声明和使用。

2. 掌握对象的声明和使用。

3. 掌握具有不同访问属性的成员的访问方式。

4. 观察构造函数和析构函数的执行过程。

5. 学习声明和使用类的继承关系,声明派生类;6. 熟悉不同继承方式下对基类成员的访问控制;二.实验内容1. 设计一个用于人事管理的People(人员)类。

考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。

具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号charid[20]。

其中“出生日期”声明为一个“日期”类内嵌子对象。

用成员函数实现对人员信息的录入和显示。

要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、组合。

在测试程序中声明people 类的对象数组,录入数据并显示。

2. 从people(人员)类派生出student(学生)类,添加属性:班号char classNO[7];从people 类派生出teacher(教师)类,添加属性:职务char pship[11]、部门char departt[21]。

从student 类中派生出graduate(研究生)类,添加属性:专业char subject[21]、导师teacher adviser;从graduate 类和teacher 类派生出TA(助教博士生)类,重载相应的成员函数,测试这些类。

三 . 实验步骤1.程序代码第一题#include <iostream>#include <string>using namespace std;class Date //日期类{private:int year;int month;int day;public:Date(){} //默认构造Date(int y,int m,int d) //带参构造{year=y;month=m;day=d;}void set() //设置数据函数{cin>>year>>month>>day;}void display() //显示函数{cout<<year<<"年"<<month<<"月"<<day<<"日";}};class Person //人员类{private:string name;int num;char sex;Date birthday;char ID[18];public:Person(){} //默认构造Person(int n,int y,int m,int d,char id[18],char s='m'):birthday(y,m,d) {num=n;sex=s;strcpy(ID,id);} //有默认值的带参构造Person(Person& p) //拷贝构造{ name=;num=p.num;sex=p.sex;birthday=p.birthday;strcpy(ID,p.ID);}void input() //输入函数{cout<<"录入数据:"<<endl;cout<<"姓名:";cin>>name;cout<<"编号:";cin>>num;cout<<"性别(m/f):";cin>>sex;cout<<"生日:";birthday.set();cout<<"身份证号:";cin>>ID;ID[18]='\0';cout<<endl;}void output() //输出函数{cout<<"编号:"<<num<<endl;cout<<"姓名:"<<name<<endl;cout<<"性别:"<<sex<<endl;cout<<"生日:";birthday.display();cout<<endl;cout<<"身份证号:"<<ID<<endl;}~Person() //析构函数{cout<<" "<<num<<"号人员已经录入"<<endl; }};int main(){Person p1;p1.input();p1.output();return 0;}第二题#include <iostream>#include <string>using namespace std;class Date //日期类{private:int year;int month;int day;public:Date(){} //默认构造Date(int y,int m,int d) //带参构造{year=y;month=m;day=d;}void set() //设置数据函数{cin>>year>>month>>day;}void display() //显示函数{cout<<year<<"年"<<month<<"月"<<day<<"日";}};class Person //人员类{private:string name;int num;char sex[10];Date birthday;char ID[18];public:Person(){} //默认构造Person(int n,int y,int m,int d,char id[18],char sex[10]):birthday(y,m,d) {num=n;strcpy(ID,id);} //有默认值的带参构造Person(Person& p) //拷贝构造{ name=;num=p.num;birthday=p.birthday;strcpy(ID,p.ID);}void input() //输入函数{cout<<"姓名:";cin>>name;cout<<"编号:";cin>>num;cout<<"性别(男/女):";cin>>sex;cout<<"生日:";birthday.set();cout<<"身份证号:";cin>>ID;ID[18]='\0';cout<<endl;}void output() //输出函数{cout<<"编号:"<<num<<endl;cout<<"姓名:"<<name<<endl;cout<<"性别:"<<sex<<endl;cout<<"生日:";birthday.display();cout<<endl;cout<<"身份证号:"<<ID<<endl;}~Person() //析构函数{//cout<<" "<<num<<"号人员已经录入"<<endl; }};class stduent:public Person{char classno[7];public: student(){cout<<"*************"<<endl; }void input(){Person::input();cout<<"输入学号"<<endl;cin>>classno;}void getno(){Person::output();cout<<"学号为:"<<classno<<endl;}};class teacher:public Person{char pship[11],departt[21];public :teacher(){cout<<"***********"<<endl;}void input(){Person::input();cout<<"输入职务"<<endl;cin>>pship;cout<<"输入部门"<<endl;cin>>departt;}void inputt(){cout<<"输入职务"<<endl;cin>>pship;cout<<"输入部门"<<endl;cin>>departt;}void getno(){Person::output();cout<<"职务为:"<<pship<<endl;cout<<"部门为:"<<departt<<endl;}void output (){cout<<"职务为:"<<pship<<endl;cout<<"部门为:"<<departt<<endl;}};class graduate:public stduent{char subject[21], adviser[21];public :graduate(){cout<<""<<endl;}void input(){stduent::input();cout<<"输入专业:"<<endl;cin>>subject;cout<<"输入导师:"<<endl;cin>>adviser;}void getno(){ stduent::getno();cout<<"专业为:"<<subject<<endl;cout<<"导师为:"<<adviser<<endl;}};class TA :public graduate,teacher{public :TA(){}void input(){graduate::input();teacher::inputt();}void getno(){graduate::getno();teacher::output();}};int main(){Person p1;stduent s;teacher t;graduate g;TA T;cout<<"请依次输入人员数据信息"<<endl;p1.input();cout<<"请输入学生数据信息";s.input();cout<<"请输入老师数据信息";t.input();cout<<"请输入研究生数据信息";g.input();cout<<"请输入助教博士数据信息";T.input();cout<<"人员数据信息为:";p1.output();cout<<"学生数据信息为:";s.getno();cout<<"老师信息为:";t.getno();cout<<"研究生信息为:";g.getno();cout<<"助教博士信息为:"T.getno();}2.调试程序第一次调试,发现没有名字的显示。

相关文档
最新文档