题目要求:
图1为一个多重继承的类继承关系示意图,各类的主要成员已有说明,请编程实现体现该继承关系的程序,并定义教师对象、学生对象、研究生对象和在职研究生对象,输出他们的信息。
数据成员
数据类Data:成员name保存姓名。
教师类Teacher:增加成员salary保存工资。
学生类Student:增加成员id保存学号。
研究生类Postgrad:增加成员dn保存系别。
教师中的在职研究生类Tpost:不另外定义成员。
成员函数
在各类中定义输出所有数据成员的函数void print()。
代码描述:
1.创建Data类
创建Data.h文件,用于声明Data类
#pragma once
#include<iostream>
using namespace std;
//定义Date类
class Data
{
private:
string name; //私有的学生姓名
public:
//构造函数 初始化成员属性 name
Data(string name);
//输出所有数据成员
void print();
};
2.实现Data类
创建Data.cpp文件,用于实现Data类
//导入Data类的声明文件
#include "Data.h"
//实现Data类的构造方法 初始化
Data::Data(string name)
{
this->name = name;
}
//打印输出Data类的所有成员属性
void Data::print()
{
cout << name << endl;
}
3.创建Teacher类
创建Teacher.h文件,用于声明Teacher类
#pragma once
//导入Data类的声明文件
#include"Data.h"
//定义Teacher类 继承Data类
class Teacher :virtual public Data
{
private:
int salary; //私有的成员属性 工资
public:
//构造函数 初始化成员属性
Teacher(string name, int sal);
//输出所有数据成员
void print();
};
4.实现Teacher类
创建Teacher.cpp文件,用于实现Teacher类
//导入Data类的声明文件
#include "Teacher.h"
//实现Teacher类的构造方法 初始化
Teacher::Teacher(string name, int sal) :Data(name)
{
this->salary = sal;
}
//打印输出Teacher类的所有成员属性
void Teacher::print()
{
Data::print();
cout << salary << endl;
}
5.创建Student类
创建Student.h文件,用于声明Student类
#pragma once
//导入Data类的声明文件
#include"Data.h"
//定义Student类 继承Data类
class Student :virtual public Data
{
private:
int id; //私有的成员属性 学号
public:
//构造函数 初始化成员属性
Student(string name, int id);
//输出所有数据成员
void print();
};
6.实现Student类
创建Student.cpp文件,用于实现Student类
//导入Data类的声明文件
#include "Student.h"
//实现Student类的构造方法 初始化
Student::Student(string name, int id) :Data(name)
{
this->id = id;
}
//打印输出Student类的所有成员属性
void Student::print()
{
Data::print();
cout << id << endl;
}
7.创建Postgrad类
创建Postgrad.h文件,用于声明Postgrad类
#pragma once
//导入Student类的声明文件
#include"Student.h"
//定义Postgrad类 继承Student类
class Postgrad :public Student
{
private:
string dn; //私有的保存系别的属性
public:
//构造函数 初始化成员属性
Postgrad(string name, int id, string dn);
//输出所有数据成员
void print();
};
8.实现Postgrad类
创建Postgrad.cpp文件,用于实现Postgrad类
//导入Postgrad类的声明文件
#include "Postgrad.h"
//实现Postgrad类的构造方法 初始化
Postgrad::Postgrad(string name, int id, string dn) :Student(name, id), Data(name)
{
this->dn = dn;
}
//打印输出Postgrad类的所有成员属性
void Postgrad::print()
{
Student::print();
cout << dn << endl;
}
9.创建Tpost类
创建Tpost.h文件,用于声明Tpost类
#pragma once
//导入Postgrad类的声明文件
#include"Postgrad.h"
//导入Teacher类的声明文件
#include"Teacher.h"
//定义Tpost类 继承Postgrad类和Teacher类
class Tpost :public Postgrad, public Teacher
{
public:
//构造函数 初始化成员属性
Tpost(string name, int id, string dn, int sal);//名字,学号,系别,工资
//输出所有数据成员
void print();
};
10.实现Tpost类
创建Tpost.cpp文件,用于实现Tpost类
//导入Tpost类的声明文件
#include "Tpost.h"
//实现Tpost类的构造方法 初始化
Tpost::Tpost(string name, int id, string dn, int sal) :Data(name), Postgrad(name, id, dn), Teacher(name, sal)
{
}
//打印输出print类的所有成员属性
void Tpost::print()
{
Postgrad::print();
Teacher::print();
}
11.Main函数实现
创建main.cpp实现各个类的功能
#include"Data.h"
#include"Student.h"
#include"Teacher.h"
#include"Postgrad.h"
#include"Tpost.h"
int main()
{
//Data类测试
Data data("张三");//名字Data类
data.print();
cout << endl;
//Student类测试
Student student("李四", 21001);//名字,学号student类
student.print();
cout << endl;
//Teacher类测试
Teacher teacher("王五", 25000);//名字,工资teacher类
teacher.print();
cout << endl;
//Postgrad类测试
Postgrad pos("赵六", 21002, "计算机");//名字,学号,系别,postgrad类
pos.print();
cout << endl;
//Tpost类测试
Tpost tpo("周七", 21003, "计算机", 22000);////名字,学号,系别,工资
tpo.print();
return 0;
}