实验五 类的继承与派生

 

(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;
}
 


 

posted @ 2015-05-06 18:34  awenzero  阅读(335)  评论(0编辑  收藏  举报