Ex9_A.cpp
上传用户:wuzhousb
上传日期:2022-07-12
资源大小:380k
文件大小:1k
源码类别:

书籍源码

开发平台:

Visual C++

  1. #include<iostream>
  2. #include<fstream>
  3. #include<string>
  4. using namespace std;
  5. class Person{
  6. string name;    //姓名
  7. char sex;         //性别
  8. public:
  9. Person(string n="noname",char s='m'){      //构造函数
  10. name=n;
  11. sex=s;
  12. }
  13. friend ostream& operator<<(ostream& dest,Person& ps);//输出姓名、性别
  14. };
  15. ostream& operator<<(ostream& dest,Person& ps){
  16. dest<<ps.name<<'t'<<ps.sex<<'t';
  17. return dest;
  18. }
  19. class Student:public Person{
  20. int id;                //学号       
  21. int Eng,Math,Phy;      //三门课成绩
  22. double ave;           //平均成绩
  23. ofstream ofile;
  24. public:
  25. Student(string n="noname",int i=0,char s='m',int e=0,int m=0,int p=0):Person(n,s){
  26. id=i;   Eng=e;   Math=m;   Phy=p;   CalAve();
  27. };
  28. ~Student();
  29.     void CalAve(){ave=double(Eng+Math+Phy)/3;}  ;        //计算平均成绩
  30. friend ostream& operator<<(ostream& dest,Student& st);//输出姓名、性别、号、三门课成绩、平均成绩
  31. };
  32. Student::~Student(){
  33. ofile.open("myfile.txt");
  34. ofile<<"name"<<'t'<<"sex"<<'t'<<"id"<<'t';
  35. ofile<<"Eng"<<'t'<<"Math"<<'t'<<"Phy"<<'t'<<"ave"<<endl;
  36. ofile<<*this;
  37. ofile.close();
  38. }
  39. ostream& operator<<(ostream& dest,Student& st){
  40. Person *p=&st;
  41. dest<<*p; //利用赋值兼容原则输出st的基类成员
  42. dest<<st.id<<'t'<<st.Eng<<'t'<<st.Math<<'t'<<st.Phy<<'t'<<st.ave;
  43. return dest;
  44. }
  45. int main(){
  46. Student st("wang",22061,'m',90,80,85); 
  47. cout<<"name"<<'t'<<"sex"<<'t'<<"id"<<'t';
  48. cout<<"Eng"<<'t'<<"Math"<<'t'<<"Phy"<<'t'<<"ave"<<endl;
  49. cout<<st<<endl;
  50.     return 0;
  51. }