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++实现JNI接口需要注意的事项
- Android Native 绘图方法
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- php7 扩展类的写法[2]
- php7 类的方法传参[3]
- 一个简单的asp数据库操作类
- Ruby面向对象编程中类与方法的基础学习
- C#实现用于操作wav声音文件的类实例
- C#类的多态性详解
- 在线管理数据库 类
- C#中struct和class的区别详解
- Lua中调用C++函数示例
- Lua面向对象之类和继承浅析
- Lua中类的实现原理探讨(Lua中实现类的方法)
- Lua教程(一):在C++中嵌入Lua脚本
- Lua中的类编程代码实例
- Lua教程(二):C++和Lua相互传递数据示例
- C#常用目录文件操作类实例