您的位置:首页 > 编程语言 > C语言/C++

C++ 实验三

2016-06-25 00:03 246 查看

一、实验目的

1、理解类层次的概念及实现类层次的方法,掌握派生的类别与方式。
2、掌握派生类中如何使用基类的成员、基类成员在派生类中的访问控制。
3、理解派生类中构造函数与析构函数的定义方法和执行顺序。

二、实验内容

1、按照下面的类层次图要求编写程序。



注:Tutor类的student成员为层次图中的student类
每个类都有input()和print()成员函数。分别定义类Tutor和ST_Score的对象,分别输入若干个数据成员的值再显示出这些数据。
2、修改ST_Score类,添加成员函数用于计算成绩平均值。

#include <iostream>
using namespace std;

class Person
{
protected:
Person(){}                        //构造方法
Person(string na,string i)
{
name=na;
id=i;
}
~Person(){cout<<"调用Person类的"<<name<<"的析构函数."<<endl;} //析构方法
string name;
string id;
public:
void inputName(string s){name=s;}
void inputID(string s){id=s;}
void printName(){cout<<"name: "<<name;}
void printID(){cout<<"id: "<<id<<endl;}
void printPersonAll()
{
printName();
cout<<endl;
printID();
}
};

class Teacher:public Person
{
protected:
Teacher(){}                                              //构造方法
Teacher(string na,string i,string deg,string depart)
{
name=na;
id=i;
deg=degree;
dep=depart;
}
~Teacher(){cout<<"调用Teacher类的"<<name<<"的析构函数."<<endl;}
string degree;
string dep;
public:
void inputDegree(string s){degree=s;}
void inputDep(string s){dep=s;}
void printDegree(){cout<<"degree: "<<degree<<endl;}
void printDep(){cout<<"department: "<<dep<<endl;}
void printTeAll()
{
printPersonAll();
printDegree();
printDep();
}
};

class Student:public Person
{
protected:
int age;
string stuID;
public:
Student(){}                                    //构造方法
Student(string na,string i,int a,string stn)
{
name=na;
id=i;
age=a;
stuID=stn;
}
~Student(){cout<<"调用Student类的"<<name<<"的析构函数."<<endl;}
void inputAge(int a){age=a;}
void inputStuID(string s){stuID=s;}
void printAge(){cout<<"Age: "<<age<<endl;}
void printStuID(){cout<<"Student's Number: "<<stuID<<endl;}
void printStAll()
{
printPersonAll();
printAge();
printStuID();
}
};

class Tutor:public Teacher
{
private:
int stuNum;
Student *student;
string meeting_Times;
public:
Tutor(){}                                           //构造方法
Tutor(string na,string i,string depa,string MT,string deg,int stN,Student *st)
{
name=na;
id=i;
dep=depa;
meeting_Times=MT;
degree=deg;
stuNum=stN;
student=st;
}
~Tutor(){cout<<"调用Tutor类的"<<name<<"的析构函数."<<endl;}//析构方法
void addStudent()                              //添加学生
{
Student *p=new Student[stuNum+1];
for(int i=0;i<stuNum;i++)
{
p[i]=student[i];
}
stuNum++;
string s;
int a;
cout<<"请输入姓名:";
cin>>s;
p[stuNum-1].inputName(s);
cout<<"请输入ID:";
cin>>s;
p[stuNum-1].inputID(s);
cout<<"请输入年龄:";
cin>>a;
p[stuNum-1].inputAge(a);
cout<<"请输入学号:";
cin>>s;
p[stuNum-1].inputStuID(s);
student=p;
cout<<endl<<"添加成功!现在"<<name<<"的学生有:"<<endl;
printStu();
cout<<endl;
}
void inputMT(string s){meeting_Times=s;}
void printMT(){cout<<"Meeting Time: "<<meeting_Times<<endl;}
void printStu()
{
int i;
cout<<name<<"的学生:"<<endl;
for(i=0;i<stuNum;i++)
student[i].printStAll();
}
void printTutorAll()
{
printTeAll();
printMT();
printStu();
}
};

class ST_Score:public Student
{
private:
double math;
double english;
double getAverScore(){double averScore=(math+english)/2;return averScore;}
public:
ST_Score(){}                                    //构造方法
ST_Score(string na,string i,int a,string stn,double ma,double en)
{
name=na;
id=i;
age=a;
stuID=stn;
math=ma;
english=en;
}
~ST_Score(){cout<<"调用ST_Score的"<<name<<"的析构函数."<<endl;}
void inputMath(int a){math=a;}
void inputEnglish(int a){english=a;}
void printMath(){cout<<"math: "<<math<<endl;}
void printEnglish(){cout<<"english: "<<english<<endl;}
void printAverScore(){cout<<"Average Score: "<<getAverScore()<<endl;}
void printSTSAll()
{
printStAll();
printMath();
printEnglish();
printAverScore();
}
};

int main()
{
ST_Score st1 = ST_Score("Tina","123456",18,"09876",55,66);
ST_Score st2 = ST_Score("Tom","34242",18,"2312332",77,88);
ST_Score st3 = ST_Score("Amy","238173",18,"98798698",99,55);
st1.printSTSAll();
cout<<endl;
st2.printSTSAll();
cout<<endl;
st3.printSTSAll();
cout<<endl;
Student sts[3]={st1,st2,st3};
Tutor tut =Tutor("Ben","8937492","计算机科学","09:00","dsfkldsjl",3,sts);
tut.printTutorAll();
cout<<endl;
cout<<"用类的成员函数input()修改类内成员变量的值:"<<endl;
st1.inputAge(19);
st1.inputMath(80);
st1.inputEnglish(90);
st1.printSTSAll();
cout<<endl;
tut.inputDegree("kdjflk");
tut.inputMT("10:00");
tut.inputID("12345678");
tut.printTeAll();
tut.printMT();
cout<<endl;
cout<<"下面演示添加学生操作:"<<endl;
tut.addStudent();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ class