Student类友元运算符重载继承综合题.docx
- 文档编号:12877908
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:15
- 大小:17.55KB
Student类友元运算符重载继承综合题.docx
《Student类友元运算符重载继承综合题.docx》由会员分享,可在线阅读,更多相关《Student类友元运算符重载继承综合题.docx(15页珍藏版)》请在冰点文库上搜索。
Student类友元运算符重载继承综合题
//定义Student类,Date类,类定义与成员函数,实现分离。
//将Student类声明为Date的友元类。
Student类需要提前声明。
//Student类的成员函数可以访问Date类的私有成员。
//成员函数:
构造函数,构造函数重载,析构函数,
//输出函数,求成绩最低者函数,排序函数。
//使用new,delete,动态分配内存。
实现班级人数不固定,可以从键盘输入。
//定义Doctor类(研究生)-公共继承于Student类
//增加私有成员:
stringthesis(论文评价),intsci_value(科研分值)
//增加相应的成员函数
//增加友元函数-运算符重载<<,>>
//增加成员函数--按照科研分值高低排序
//student.h---头函数,类的定义
#include
#include
usingnamespacestd;
classStudent;//提前声明
classDate//定义Date类-存放出生年月日
{
friendclassStudent;//友元类,Student成员函数可以访问Date类的私有成员
public:
Date();//无参构造函数
Date(int,int,int);//有参构造函数
~Date();//析构函数
//protected:
//这里是保护成员//这里是VC6.0的原因
intyear;//年
intmonth;//月
intday;//日
};
classStudent//定义Student类-存放学生信息
{
public:
Student();//无参构造函数
Student(string,string,char,Date,int);//有参构造函数
~Student();//析构函数
voiddisplay();//输出函数
voidinput();//输入函数
voidmin(Student*,int);//求最低成绩函数
voidsort(Student*,int);//按照成绩高低排序函数
//protected:
//这里是保护成员//这里是VC6.0的原因
stringnum;//学号
stringname;//姓名
charsex;//性别
Datebirthday;//生日
intscore;//成绩
};
//以下内容是增加继承后增添的
classDoctor:
publicStudent//定义Doctor类,是Student的派生类
{
public:
Doctor();//无参构造函数
Doctor(string,int);//有参构造函数
voiddisplay1();//输出函数
voidset();//输入函数
voidsort(Doctor*,int);//按照科研分值高低排序函数
friendostream&operator<<(ostream&,Doctor&);//重载运算符<<,友元函数
friendistream&operator>>(istream&,Doctor&);//重载运算符>>,友元函数
//private:
//这里是VC6.0的原因
stringthesis;//论文评价
intsci_value;//科研分值
};
//以上内容是增加继承后增添的
//student.cpp---成员函数的定义
#include"student.h"
Date:
:
Date()//无参构造函数
{
year=1900;//默认生日:
1900-1-1
month=1;
day=1;
}
Date:
:
Date(inty,intm,intd)//有参构造函数
{
year=y;
month=m;
day=d;
}
Date:
:
~Date()//析构函数-函数体为空
{
//cout<<"DateDestructorcalled."< } Student: : Student()//无参构造函数,自动赋值 { num="";//默认为空字符串 name="";//默认为空字符串 sex='';//默认为空格 birthday.year=1900;//默认生日: 1900-1-1 birthday.month=1; birthday.day=1; score=0;//默认成绩为0 } Student: : Student(stringn,stringnam,chars,Datebir,intc)//有参构造函数,将参数值赋给成员 { num=n; name=nam; sex=s; birthday.year=bir.year; birthday.month=bir.month; birthday.day=bir.day; score=c; } Student: : ~Student()//析构函数-函数体为空 { //cout<<"Destructorcalled."< } voidStudent: : display()//输出学生信息函数 { cout<<"num: "< cout<<"name: "< cout<<"sex: "< cout<<"birthday: "< cout<<"score: "< } voidStudent: : input()//输入学生信息函数 { cout<<"请输入学生信息: "< cout<<"学号姓名性别出生年出生月出生日成绩: "< cin>>num; cin>>name; cin>>sex; cin>>birthday.year; cin>>birthday.month; cin>>birthday.day; cin>>score; } voidStudent: : sort(Student*p,intN)//按照成绩高低排序函数 { inti,j; stringtemp_num,temp_name; chartemp_sex; Datetemp_bir; inttemp_score; for(i=0;i for(j=i+1;j if(p[i].score { temp_num=p[i].num; p[i].num=p[j].num; p[j].num=temp_num; temp_name=p[i].name; p[i].name=p[j].name; p[j].name=temp_name; temp_sex=p[i].sex; p[i].sex=p[j].sex; p[j].sex=temp_sex; temp_bir.year=p[i].birthday.year; p[i].birthday.year=p[j].birthday.year; p[j].birthday.year=temp_bir.year; temp_bir.month=p[i].birthday.month; p[i].birthday.month=p[j].birthday.month; p[j].birthday.month=temp_bir.month; temp_bir.day=p[i].birthday.day; p[i].birthday.day=p[j].birthday.day; p[j].birthday.day=temp_bir.day; temp_score=p[i].score; p[i].score=p[j].score; p[j].score=temp_score; } } voidStudent: : min(Student*p,intN)//求最低成绩函数 { stringmin_num,min_name; charmin_sex; Datemin_bir; intmin_score; min_num=p->num; min_name=p->name; min_sex=p->sex; min_bir.year=p->birthday.year; min_bir.month=p->birthday.month; min_bir.day=p->birthday.day; min_score=p->score; p++; for(inti=1;i { if(p->score { min_num=p->num; min_name=p->name; min_sex=p->sex; min_bir.year=p->birthday.year; min_bir.month=p->birthday.month; min_bir.day=p->birthday.day; min_score=p->score; } p++; } cout<<"学生成绩最低者信息: "< cout<<"num="< cout<<"name="< cout<<"sex="< cout<<"birthday: "< cout<<"score="< } //以下内容是增加继承后增添的 Doctor: : Doctor() { thesis=""; sci_value=0; } Doctor: : Doctor(stringt,intc) { thesis=t; sci_value=c; } voidDoctor: : display1() { cout<<"thesis: "< cout<<"sci_value: "< } voidDoctor: : set() { cout<<"学生论文等级和科研量化分数: "< cin>>thesis; cin>>sci_value; } voidDoctor: : sort(Doctor*p,intN)//按照科研分值高低排序函数 { inti,j; stringtemp_num,temp_name; chartemp_sex; Datetemp_bir; inttemp_score; stringtemp_thesis; inttemp_sci_value; for(i=0;i for(j=i+1;j if(p[i].sci_value { temp_num=p[i].num; p[i].num=p[j].num; p[j].num=temp_num; temp_name=p[i].name; p[i].name=p[j].name; p[j].name=temp_name; temp_sex=p[i].sex; p[i].sex=p[j].sex; p[j].sex=temp_sex; temp_bir.year=p[i].birthday.year; p[i].birthday.year=p[j].birthday.year; p[j].birthday.year=temp_bir.year; temp_bir.month=p[i].birthday.month; p[i].birthday.month=p[j].birthday.month; p[j].birthday.month=temp_bir.month; temp_bir.day=p[i].birthday.day; p[i].birthday.day=p[j].birthday.day; p[j].birthday.day=temp_bir.day; temp_score=p[i].score; p[i].score=p[j].score; p[j].score=temp_score; temp_thesis=p[i].thesis; p[i].thesis=p[j].thesis; p[j].thesis=temp_thesis; temp_sci_value=p[i].sci_value; p[i].sci_value=p[j].sci_value; p[j].sci_value=temp_sci_value; } } ostream&operator<<(ostream&output,Doctor&Doc)//重载运算符<< { output<<"num: "< output<<"name: "< output<<"sex: "< 月-日-年 output<<"birthday: "< output<<"score: "< output<<"thesis: "< output<<"sci_value: "< returnoutput; } istream&operator>>(istream&input,Doctor&Doc)//重载运算符>>,友元 { cout<<"学号姓名性别出生年月日成绩论文评价科研分值"< input>>Doc.num>>Doc.name>>Doc.sex; input>>Doc.birthday.year>>Doc.birthday.month>>Doc.birthday.day; input>>Doc.score; input>>Doc.thesis>>Doc.sci_value; returninput; } //以上内容是增加继承后增添的 //main.cpp---主函数,发布消息 #include"student.h" intmain() { /* Students1; Datebir(1998,2,27); Students2("1003","zhang",'f',bir,99); s1.display(); s2.display(); intstu_total;//学生总数 cout<<"输入班级学生总人数: "; cin>>stu_total; Student*p=newStudent[stu_total];//动态分配内存,p指向它 for(inti=0;i { (p+i)->input();//通过成员函数Student: : input()向这片内存地址写入学生信息 } cout<<"排序之前学生信息如下: "< for(i=0;i (p+i)->display();//通过Student: : display()将这片内存所存放的学生信息输出 Student*ps;//定义一个指向Student的指针对象(变量) ps=p;//让ps指向p ps->min(ps,stu_total);//输出成绩最低者 ps->sort(ps,stu_total);//排序 ps=p;//让重新指向p cout<<"排序之后学生信息如下: "< for(i=0;i { ps->display();//通过Student: : display()将这片内存所存放的学生信息输出 ps++; } //以下内容是增加继承后增添的 Doctord1("excellent",95);//调用有参构造函数 d1.input();//输入学生信息 cout<<"研究生信息"< d1.display();//输出学生信息 d1.display1();//输出研究生信息 Doctord2;//调用无参构造函数 d2.input();//输入学生信息 d2.set();//输入研究生信息 cout<<"研究生信息"< d2.display();//输出学生信息 d2.display1();//输出研究生信息 cout<<"重载运算符后: "< cout< //以上内容是增加继承后增添的 */ //下面这一部分,最新 intdoc_total;//博士生总数 cout<<"输入博士生总人数: "; cin>>doc_total; Doctor*p=newDoctor[doc_total];//动态分配内存,p指向它 cout<<"输入博士信息"< for(inti=0;i cin>>p[i]; cout<<"排序之前博士生信息如下: "< for(i=0;i cout< Doctor*ps;//定义一个指向Doctor的指针对象(变量) ps=p;//让ps指向p ps->sort(ps,doc_total);//排序 ps=p;//让重新指向p cout<<"排序之后博士生信息如下: "< for(i=0;i cout< //上面这一部分,最新 delete[]p;//释放p指向的内存空间 return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Student 类友元 运算 重载 继承 综合
![提示](https://static.bingdoc.com/images/bang_tan.gif)