实验报告
课程名称:面向对象程序设计(C++) 实验名称:类的多重/层继承和派生院(系):
专业班级:
姓名:
学号:
指导教师:
2018年10月30日
《面向对象程序设计(C++)》实验报告
课程名称:面向对象程序设计(C++)
实验项目名称:类的多重/层继承和派生
实验类型:综合型实验
实验地点:草堂机房
实验日期:2018年10月30 日
一、实验目的
(1)掌握类的多重继承和多层继承的声明方式及使用方法;
(2)掌握类多重和多层继承和派生的构造函数和析构函数使用方法;
(3)掌握多重继承二义性处理的方法;
(4)掌握虚基类的使用方法;
二、实验内容和要求
分别定义Person类,Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)类。
要求:
(1)在Person类中含姓名、年龄、性别、电话等私有数据成员。
在Teacher 类中还包含私有数据成员title(职称),在Cadre类中还包含私有数据成员post(职务),在Teacher_Cadre类中还包含私有数据成员wages(工资)。
(2)在Person类为Teacher类和Cadre类的直接基类;Teacher类和Cadre类为Teacher_Cadre类的直接基类;
(3)使用虚基类方法继承Person类;
(4)每个类都分别有有参和无参构造函数、数据成员输出函数;
(5)分别创建Teacher_Cadre的无参对象和有参对象;(无参对象的数据成员从键盘输入完成构造),并分别输出两个对象的所有数据成员。
三、实验硬件、软件环境
1,PC计算机一台,配置为CPU为P4 2.8G,内存为512M,硬盘为80G;
2,WindowsXP , VC++6.0 。
四、实验设计(程序代码)
#include<iostream>
#include<string>
using namespace std;
class Person
{public:
Person();
Person(string nam,int a,char s,string t) {name=nam;
age=a;
sex=s;
tel=t;
cout<<"Constructed Person"<<endl;
}
void get_value()
{cin>>name;
cin>>age;
cin>>sex;
cin>>tel;
}
void display()
{cout<<"name:"<<name<<endl;
cout<<"age:"<<age<<endl;
cout<<"sex:"<<sex<<endl;
cout<<"tel:"<<tel<<endl;
}
private:
string name;
int age;
char sex;
string tel;
};
Person::Person()
{name="zhang_san";
age=20;
sex='m';
tel="12345678";
}
class Teacher:virtual public Person
{public:
Teacher();
Teacher(string nam,int a,char s,string t,string tit):Person(nam,a,s,t) {title=tit;
cout<<"Constructed Teacher"<<endl;
}
void get_value1()
{cin>>title;
}
void display1()
{cout<<"title:"<<title<<endl;
}
private:
string title;
};
Teacher::Teacher()
{title="student";
}
class Cadre:virtual public Person
{public:
Cadre();
Cadre(string nam,int a,char s,string t,string p):Person(nam,a,s,t) {post=p;
cout<<"Constructed Cadre"<<endl;
}
void get_value2()
{cin>>post;
}
void display2()
{
cout<<"post:"<<post<<endl;
}
private:
string post;
};
Cadre::Cadre()
{post="leader";
}
class Teacher_Cadre:public Teacher,public Cadre
{public:
Teacher_Cadre();
Teacher_Cadre(string nam,int a,char s,string t,string tit,string p,float w):Person(nam,a,s,t),Teacher(nam,a,s,t,tit),Cadre(nam,a,s,t,p)
{wage=w;
cout<<"Constructed Teacher_Cadre"<<endl;
}
void show()
{Person::display();
Teacher::display1();
Cadre::display2();
cout<<"wage:"<<wage<<endl;
}
void get_value3()
{Person::get_value();
Teacher::get_value1();
Cadre::get_value2();
cin>>wage;
}
private:
float wage;
};
Teacher_Cadre::Teacher_Cadre()
{
Teacher::Teacher();
Cadre::Cadre();
wage=6000;
}
int main()
{ Teacher_Cadre t1;
t1.show();
Teacher_Cadre t2;
t2.get_value3();
t2.show();
return 0;
}
五、实验结果及分析(调试中出现问题及解决方法)
六、体会
1.在多重继承中一定要注意在引用基类成员时,要通过直接派生类名来指出要访问的是哪一派生类的基类成员
2.在调用的时候要注意不要重复调用,避免重复。
3.注意字符型数组赋值时的格式。
七、教师评语和成绩
教师签名:
2018年月日。