前言
NWAFU P1381
一、题目描述
题目描述
(1)定义人员类Person:
公有成员:姓名(Name);
保护成员:性别(Gender),年龄(Age);
构造函数和析构函数
(2) 从人员类Person派生学生记录类StudentRecord:
添加公有成员:学号(Number),班级(ClassName),
添加静态公有成员:学生总人数(TotalCount);
添加保护成员:平均成绩(Score);
实现构造函数和析构函数。
(3) 从人员类Person派生教师记录类TeacherRecord:
添加公有成员:学院(CollegeName),系(DepartmentName);
添加保护成员:教龄(Year);
实现构造函数和析构函数。
(4)从学生记录类StudentRecord和教师记录类TeacherRecord派生学生助教类TeachingAssistant:
添加公有成员:辅导课程(LectureName);
实现公有函数:显示人员信息(Show),屏幕打印 姓名,性别,年龄,学号,班级,学生总人数,平均成绩,学院,系,教龄,辅导课程。
实现构造函数和析构函数。为检验类间结构设计是否正确,设计函数void SetName(String name)实现更改一名助教的姓名的功能。
创建一个助教类的对象
助教
姓名 性别 年龄 学号 班级 平均成绩 学院 系 教龄 辅导课程
郑七 男 22 2010123 软20101 89 信息 软件 1 数据结构
显示其信息。
调用更改姓名的函数,更改其姓名为“郑八”,并再次显示其信息。
提示
各类的构造函数和析构函数都有输出。
调用公有函数Show,以分别显示各个记录的人员信息。
在派生助教类时,使用虚基类。
二、设计步骤
代码实现:
#include <iostream>
#include <string>
using namespace std;
class Person {
public:
string Name;
protected:
string Gender;
int Age;
public:
Person(const string& name, const string& gender, int age) : Name(name), Gender(gender), Age(age) {
cout << "Person" << Name << "constructed" << endl;
}
virtual ~Person() {
cout << "Person" << Name << "destructed" << endl;
}
};
class StudentRecord : virtual public Person { // 虚拟继承
public:
string Number;
string ClassName;
static int TotalCount;
protected:
float Score;
public:
StudentRecord(const string& name, const string& gender, int age, const string& number, const string& className, float score)
: Person(name, gender, age), Number(number), ClassName(className), Score(score) {
TotalCount++;
cout << "Student" << Name << "constructed" << endl;
}
~StudentRecord() {
cout << "Student" << Name << "destructed" << endl;
}
};
int StudentRecord::TotalCount = 0;
class TeacherRecord : virtual public Person { // 虚拟继承
public:
string CollegeName;
string DepartmentName;
protected:
int Year;
public:
TeacherRecord(const string& name, const string& gender, int age, const string& collegeName, const string& departmentName, int year)
: Person(name, gender, age), CollegeName(collegeName), DepartmentName(departmentName), Year(year) {
cout << "teacher" << Name << "constructed" << endl;
}
~TeacherRecord() {
cout << "teacher" << Name << "destructed" << endl;
}
};
class TeachingAssistant : public StudentRecord, public TeacherRecord {
public:
string LectureName;
public:
TeachingAssistant(const string& name, const string& gender, int age, const string& number, const string& className, float score,
const string& collegeName, const string& departmentName, int year, const string& lectureName)
: Person(name, gender, age), StudentRecord(name, gender, age, number, className, score),
TeacherRecord(name, gender, age, collegeName, departmentName, year), LectureName(lectureName) {
cout << "teachingassistant" << Name << "constructed" << endl;
}
void Show() {
cout << "Name:" << Name << " ";
cout << "Gender:" << Gender << " ";
cout << "Age:" << Age << " ";
cout << "Number:" << Number << " ";
cout << "ClassName:" << ClassName << " ";
cout << "TotalCount:" << TotalCount << " ";
cout << "Score:" << Score << " ";
cout << "CollegeName:" << CollegeName << " ";
cout << "DepartmentName:" << DepartmentName << " ";
cout << "Year:" << Year << " ";
cout << "LectureName:" << LectureName << endl;
}
void SetName(const string& name) {
Name = name;
}
~TeachingAssistant() {
cout << "teachingassistant" << Name << "destructed" << endl;
}
};
int main() {
TeachingAssistant ta("郑七", "男", 22, "2010123", "软20101", 89.0, "信息", "软件", 1, "数据结构");
// cout << "初始信息:" << endl;
ta.Show();
ta.SetName("郑八");
// cout << "\n更改后的信息:" << endl;
ta.Show();
return 0;
}
PS:输出格式超抽象!
总结
EOF