题目
建立一个简单的大学管理系统,其中有学生、教师和兼职学生。大学类继承的层次关系
如下图:
University(虚基类)
Student Teacher
T_Student
大学类继承的层次图
图中,大学类University是虚基类,它包含了所有派生类共有的数据成员,学生类Student和教师类Teacher为虚基类University的派生类,兼职大学生类T_Student是学生类Student和教师类Teacher的共同派生类。每个类定义了一个不同的print() 函数,输出各类的数据成员。各类数据成员如下:
University类; 姓名( name )、年龄( age )
Student 类 : 姓名( name )、年龄( age )、学号(stu_no)、专业(major)、年级(level)
Teacher类: 姓名( name )、年龄( age )、系别(dept)、职称(Title)、工资(salary)
T_Student类: 姓名( name )、年龄( age )、学号(stu_no)、专业(majcr)、年级(level)、
系别(dept)、职称(Title)、工资(salary)
设计大学管理系统类的结构程序,要运用派生类构造函数传递参数,实现简单的大学管理系统。编写主函数创建三种类的对象并输出各对象的数据成员。各对象具体数据自定。
提示:
(1)在“综合应用项目”中简单的大学管理系统有几个类,
大学类University是虚基类,它的继承的层次关系如何?
(2)各类包含哪些数据,按照类的层次关系定义虚基类,各派生类。
(3)按多重继承的构造函数初始化列表的要求设计各类的构造函数,派生类要向基类和虚基类传递参数。并根据需要设计析构函数。
(4)设计各类输出数据的输出函数。
(5)完整写出管理系统类的程序结构
(6)设计主函数,创建三个类的对象(大学生、教师、兼职
大学生),提供自选的数据,调用相应输出函数实现输出
#include <iostream>
#include <string>
using namespace std;
class University{
private:
string Name;
int Age;
public:
University(string name,int age){
Name=name;
Age=age;
}
void printuni(){
cout<<"姓名:"<<Name<<endl;
cout<<"年龄"<<Age<<endl;
}
};
class Student:public virtual University{
private:
string Stu_no;
string Major;
int Level;
public:
Student(string name,int age,string stu_no,string major,int level);
void printstu();
};
Student::Student(string name,int age,string stu_no,string major,int level)
:University(name,age){
Stu_no=stu_no;
Major=major;
Level=level;
}
void Student::printstu(){
printuni();
cout<<"学号"<<Stu_no<<endl;
cout<<"专业"<<Major<<endl;
cout<<"年级"<<Level<<endl;
}
class Teacher:public virtual University{
private:
string Dept;
string Title;
int Salary;
public:
Teacher(string name,int age,string dept,string title,int salary);
void printtea();
};
Teacher::Teacher(string name,int age,string dept,string title,int salary)
:University(name,age){
Dept=dept;
Title=title;
Salary=salary;
}
void Teacher::printtea(){
printuni();
cout<<"系别"<<Dept<<endl;
cout<<"职称"<<Title<<endl;
cout<<"工资"<<Salary<<endl;
}
class T_Student:public Student,public Teacher{
public:
T_Student(string name,int age,string stu_no,string major,int level,string dept,string title,int salary);
void printT_S();
};
T_Student::T_Student(string name,int age,string stu_no,string major,int level,string dept,string title,int salary)
:Student(name,age,stu_no,major,level),Teacher(name,age,dept,title,salary),University(name,age){}
void T_Student::printT_S(){
printstu();
printtea();
}
void main(){
cout<<"*************University***************"<<endl;
string aa="aaaaa";
int ah=5;
University un(aa,ah);
un.printuni();
cout<<"*************Student****************"<<endl;
string ab="bbbbb";
int ai=6;
string x="210808036";
string y="英语";
int nj=1;
Student stu(ab,ai,x,y,nj);
stu.printstu();
cout<<"***********Teacher******************"<<endl;
string ac="cccccc";
int aj=7;
string xi="computer";
string zh="professor";
int sa=3000;
Teacher te(ac,aj,xi,zh,sa);
te.printtea();
cout<<"***********T_Student****************"<<endl;
string ad;
int ak=8;
string xh="369854271";
string zhuanye="物理";
int nianji=4;
//系别与专业一样,不重复定义
string zhicheng="研究生";
int gongzi=5000;
T_Student sss(ad,ak,xh,zhuanye,nianji,zhuanye,zhicheng,gongzi);
sss.printT_S();
}
//有问题,百度hi我
//打印结果
参考资料:自己经验