实验五 类的继承与派生
(1)编程:编写一个学生类Student。要求:
① 学生的保护属性有:学号(Num),姓名(Name),性别(Sex);
学生的公用成员函数有:ReadData( )用于输入Num、Name、Sex。OutputData( )用于输出Num、Name、Sex。
② 然后,在学生类的基础上派生出研究生类Graduate,该类新增私有属性研究方向(ResearchD),新增公用成员函数ResearchWork( ),该函数功能为输出学号和研究方向。
③ 编写main函数测试基类和派生类的各属性很函数的访问。修改派生类的派生方式以及基类成员的访问方式,再测试看看基类和派生类的属性访问方式有何不同。
(2)编程:在上述工程中增加一个Teacher(教师)类,采用多重继承方式由Student和Teacher类公有派生出新类Student_Teacher。要求:
① Teacher类的保护成员有:Name、Sex、Title(职称)、Wages(工资)。两个基类中的Name、Sex同名,在引用这些数据成员时,指定作用域。
② 在派生类Student_Teacher中,增加两个成员函数:ReadF1()用于读入:Num、Name、Sex、Title、Wages。Show()用于输出数据,在Show()中,首先调用Student类的display()函数用于输出Num、Name、Sex,然后再用cout语句输出Title、Wages。
③ 在类体中声明成员函数,在类外定义成员函数。
思考题:类的三种继承方式的主要区别是什么?
编程一:
#include <iostream>
#include <string>
using namespace std;
class Student
{
protected:
int num;
string name;
char sex;
public:
Student(int nu,string na,char s);
void ReadData();
void OutputData();
~Student();
};
Student::Student(int nu,string na,char s):
num(nu),name(na),sex(s) {}
void Student::ReadData()
{
int nu;
string na;
char s;
cout << "Please input num,name and sex: " << endl;
cin >> nu >> na >> s;
num = nu;
name = na;
sex = s;
}
void Student::OutputData()
{
cout << "The student's information: " << endl;
cout << "num: " << num << endl;
cout << "name: " << name << endl;
cout << "sex: " << sex << endl;
}
Student::~Student() {}
class Graduate:public Student
{
private:
string ResearchD;
public:
Graduate(Student &s,string r);
Graduate(int nu,string na,char s,string r);
~Graduate();
void ResearchWork();
};
Graduate::Graduate(int nu,string na,char s,string r):
Student(nu,na,s),ResearchD(r) {}
Graduate::Graduate(Student &s,string r):
Student(s),ResearchD(r) {}
void Graduate::ResearchWork()
{
cout << "The ResearchWork: " << endl;
cout << "num: " << num << endl;
cout << "ResearchD: " << ResearchD << endl;
}
Graduate::~Graduate()
{}
int main()
{
Student stu(2301,"JIMORT",'m');
stu.OutputData();
stu.ReadData();
stu.OutputData();
Graduate g(stu,"computer");
g.ResearchWork();
return 0;
}
编程二:
#include <iostream>
#include <string>
using namespace std;
class Student
{
protected:
int num;
string name;
char sex;
public:
Student(int nu,string na,char s);
Student();
void ReadData();
void OutputData();
~Student();
};
Student::Student()
{}
Student::Student(int nu,string na,char s):
num(nu),name(na),sex(s) {}
void Student::ReadData()
{
int nu;
string na;
char s;
cout << "Please input num,name and sex: " << endl;
cin >> nu >> na >> s;
num = nu;
name = na;
sex = s;
}
void Student::OutputData()
{
cout << "The student's information: " << endl;
cout << "num: " << num << endl;
cout << "name: " << name << endl;
cout << "sex: " << sex << endl;
}
Student::~Student() {}
class Teacher
{
protected:
string name;
char sex;
string title;
float wages;
public:
Teacher();
Teacher(string na,char s,string t,float w);
~Teacher() {}
};
Teacher::Teacher()
{}
Teacher::Teacher(string na,char s,string t,float w):
name(na),sex(s),title(t),wages(w) {}
/*class Graduate:public Student
{
private:
string ResearchD;
public:
Graduate(Student &s,string r);
Graduate(int nu,string na,char s,string r);
~Graduate();
void ResearchWork();
};
Graduate::Graduate(int nu,string na,char s,string r):
Student(nu,na,s),ResearchD(r) {}
Graduate::Graduate(Student &s,string r):
Student(s),ResearchD(r) {}
void Graduate::ResearchWork()
{
cout << "The ResearchWork: " << endl;
cout << "num: " << num << endl;
cout << "ResearchD: " << ResearchD << endl;
}
Graduate::~Graduate()
{}*/
class Student_Teacher: public Student, public Teacher
{
public:
Student_Teacher();
void ReadF1();
void show();
};
Student_Teacher::Student_Teacher():
Student(),Teacher() {}
void Student_Teacher::ReadF1()
{
cout << "Please input the information: " << endl;
cin >> Student::num >> Student::name >> Student::sex >> title >> wages ;
}
void Student_Teacher::show()
{
OutputData();
cout << "After become a teacher,title and wages are: " << endl;
cout << "title: " << title << endl;
cout << "wages: " << wages << endl;
}
int main()
{
Student stu(2301,"JIMORT",'m');
Student_Teacher st;
st.ReadF1();
st.show();
//stu.OutputData();
//stu.ReadData();
//stu.OutputData();
//Graduate g(stu,"computer");
//g.ResearchWork();
return 0;
}