运算符重载有关习题与答案.docx
- 文档编号:1013141
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:35
- 大小:20.67KB
运算符重载有关习题与答案.docx
《运算符重载有关习题与答案.docx》由会员分享,可在线阅读,更多相关《运算符重载有关习题与答案.docx(35页珍藏版)》请在冰点文库上搜索。
运算符重载有关习题与答案
1. (10分)
学生类——静态数据成员和静态成员函数
题目描述
定义一个类Student,要求使用静态数据成员或静态成员函数计算全班学生的《计算机导论》课程的总成绩和平均成绩。
静态数据成员:
staticinttotal;
静态成员函数:
staticvoidAverage(){}
输入描述
学生姓名课程成绩
输出描述
总成绩和平均成绩
输入样例
Zhang82
Li79
Wang93
Liu66
Xia90
输出样例
410
82
我的代码:
#include
#include
#include
usingnamespacestd;
classStudent
{
public:
Student(char*p,ints);
voidtotal_score(ints);
staticintTotal();
staticvoidAverage();
private:
staticinttotal;
staticintnum;
staticdoubleaverage;
intscore;
charname[20];
};
intStudent:
:
total=0;
doubleStudent:
:
average=0.0;
intStudent:
:
num=0;
Student:
:
Student(char*p,ints)
{
strcpy(name,p);
score=s;
}
voidStudent:
:
total_score(ints)
{
score=s;
num++;
total+=score;
}
intStudent:
:
Total()
{
returntotal;
}
voidStudent:
:
Average()
{
average=(double)total/num;
cout< } intmain() { charname1[20],name2[20],name3[20],name4[20],name5[20]; ints1,s2,s3,s4,s5; cin>>name1>>s1>>name2>>s2>>name3>>s3; cin>>name4>>s4>>name5>>s5; Studentstu1(name1,s1),stu2(name2,s2),stu3(name3,s3); Studentstu4(name4,s4),stu5(name5,s5); stu1.total_score(s1); stu2.total_score(s2); stu3.total_score(s3); stu4.total_score(s4); stu5.total_score(s5); cout< : Total()< Student: : Average(); return0; } 代码二: #include #include usingnamespacestd; classStase { private: staticinttotal; staticintn; stringname; doublemark; staticdoubleAverage(); public: staticvoidshow(); Stase(); Stase(conststring&Name,constintMark): name(Name),mark(Mark){ total+=Mark; n++; } }; intStase: : total=0; intStase: : n=0; doubleStase: : Average() { returntotal/n; } voidStase: : show() { cout< cout< } intmain() {stringname; intnumble; for(inti=0;i<5;++i) { cin>>name>>numble; Stasestase(name,numble); } Stase: : show(); return0; } 窗体顶端 窗体底端 2. (10分) 学生成绩高低——友元函数 题目描述 在第一题的基础上,设计一个友元函数,比较某两个学生成绩的高低。 输入描述 学生姓名和分数 输出描述 分数高低的结果(>或<或==) 输入样例 zhang92 li89 输出样例 > 我的代码: #include #include #include usingnamespacestd; classStudent { public: Student(char*p,ints); voidtotal_score(ints); staticintTotal(); staticvoidAverage(); friendvoidCompare(Student&s1,Student&s2); private: staticinttotal; staticintnum; staticdoubleaverage; intscore; charname[20]; }; intStudent: : total=0; doubleStudent: : average=0.0; intStudent: : num=0; Student: : Student(char*p,ints) { strcpy(name,p); score=s; } voidStudent: : total_score(ints) { score=s; num++; total+=score; } intStudent: : Total() { returntotal; } voidStudent: : Average() { average=(double)total/num; cout< } voidCompare(Student&s1,Student&s2) { if(s1.score>s2.score) { cout<<">"< } else if(s1.score==s2.score) cout<<"=="< else cout<<"<"< } intmain() { charname1[20],name2[20]; ints1,s2; cin>>name1>>s1>>name2>>s2; Studentstu1(name1,s1),stu2(name2,s2); Compare(stu1,stu2); return0; } 窗体顶端 窗体底端 3. (10分) 栈类——类模板 题目描述 用类模板方式设计一个栈类stack s[](存放栈元素)和top(栈顶元素下标),以及3个公有成员函数: push(元素入栈)、pop(元素出栈)和stackempty(判断栈是否为空),并建立一个整数栈和一个字符栈。 template classstack { }; 输入描述 输入整数栈的数据元素和字符栈的数据元素 输出描述 输出整数栈的数据元素出栈序列和字符栈的数据元素出栈序列 输入样例 4832 adbc 输出样例 2384 cbda 我的代码: #include usingnamespacestd; template classStack { public: Stack(Tt); voidPush(Tvalue); TPop(); boolIs_empty()const; intSize(); ~Stack(); private: inttop; Ts[100]; }; template : Stack(Tt) { for(inti=0;i<100;i++) s[i]=t; top=-1; } template : Push(Tvalue) { top++; s[top]=value; }//入栈 template : Pop() { returns[top--]; }//出栈 template : Is_empty()const { returntop==-1? 1: 0; }//判断栈是否为空 template : Size() { returntop+1; } template : ~Stack()//析构函数~Stack()实现体 { } intmain() { intx1,x2,x3,x4; chary1,y2,y3,y4; cin>>x1>>x2>>x3>>x4; cin>>y1>>y2>>y3>>y4; Stack s1.Push(x1); s1.Push(x2); s1.Push(x3); s1.Push(x4); Stack s2.Push(y1); s2.Push(y2); s2.Push(y3); s2.Push(y4); while(! s1.Is_empty()) { cout< } cout< while(! s2.Is_empty()) { cout< } return0; } 窗体顶端 窗体底端 4. (10分) 时间类——类和对象 题目描述 仿照教材第13章的Date类设计一个Time类,设计多个重载的构造函数,可以设置时间、进行时间的加减运算、按12小时格式和24小时格式输出时间。 例如: classTime { inthour,minute,second; public: intSecCalc() { return(hour*60+minute)*60+second;} Time(inth=0,intm=0,ints=0); voidSetTime(inth=0,intm=0,ints=0); voidprint_12(); voidprint_24(); TimeAdd(Time&); TimeSub(Time&); }; 其中成员函数Time: : print_12()按12小时格式显示时间,如“09: 20: 45AM”、“03: 15: 20PM”;成员函数Time: : print_24()按24小时格式显示时间,如“09: 20: 45”、“4: 30: 20”;成员函数TimeTime: : Add(Time&)用来实现两个时间对象的值进行相加;成员函数TimeTime: : Sub(Time&)用来实现两个时间对象的值进行相减。 为了检验Time类的功能,主函数按如下方式设计: intmain() { Timet1(2,34),t2; t2.SetTime(13,23,34); cout<<"t2: "; t2.print_12(); cout< "; t2.print_24(); cout<<"\nt1+t2: "; t1.Add(t2).print_24(); cout<<"\nt1-t2: "; t1.Sub(t2).print_24(); return0; } 输入描述 无 输出描述 略 输入样例 无 输出样例 t2: 01: 23: 34PM t2: 13: 23: 34 t1+t2: 15: 57: 34 t1-t2: 10: 49: 34 我的代码: #include #include usingnamespacestd; classTime { inthour,minute,second; public: intSecCalc() { return(hour*60+minute)*60+second; } Time(inth=0,intm=0,ints=0); voidSetTime(inth=0,intm=0,ints=0); voidprint_12(); voidprint_24(); TimeAdd(Time&); TimeSub(Time&); }; Time: : Time(inth,intm,ints) { hour=h; minute=m; second=s; } voidTime: : SetTime(inth,intm,ints) { hour=h; minute=m; second=s; } voidTime: : print_12() { if(hour>=0&&hour<=11) { cout< cout< (2)< "< "< } else { cout< cout< (2)< "< "< } } voidTime: : print_24() { cout< cout< (2)< "< "< } TimeTime: : Add(Time&t1) { inttemp=(hour*3600+minute*60+second)+(t1.hour*3600+t1.minute*60+t1.second); hour=temp/3600; minute=(temp%3600)/60; second=temp%3600%60; return*this; } TimeTime: : Sub(Time&t2) { inttemp=(hour*3600+minute*60+second)-(t2.hour*3600+t2.minute*60+t2.second); if(temp<0) temp=-temp; hour=temp/3600; minute=(temp%3600)/60; second=temp%3600%60; return*this; } intmain() { Timet1(2,34),t2; t2.SetTime(13,23,34); cout<<"t2: "; t2.print_12(); cout< "; t2.print_24(); cout<<"\nt1+t2: "; t1.Add(t2).print_24(); t1.SetTime(2,34); cout<<"\nt1-t2: "; t1.Sub(t2).print_24(); return0; } 窗体顶端 窗体底端 5. (10分) 时间类——赋值运算符重载 题目描述 对第4题设计的Time类进行修改,通过重载“+”、“-”运算符直接进行时间的加减运算。 提示: (1)用友元函数来实现运算符的重载 (2)加法运算符可以是两个Time对象进行相加,也可以是一个表示秒数的int型数据加上一个Time对象,可以是Time对象加上int型数据,得到的结果都是Time类型的对象。 (3)减法运算符可以是两个Time对象进行相减,也可以是Time对象减去一个表示秒数的int型数据,得到的结果都是Time类型的对象。 主函数设计如下: intmain() { Timet1(2,34),t2,t3; t2.SetTime(13,23,34); cout<<"\nt1+t2: "; t3=t1+t2; //两个Time类对象相加 t3.print_24(); cout<<"\nt1+65: "; t3=t1+65; //Time类对象加上65秒 t3.print_24(); cout<<"\n65+t1: "; t3=65+t1; //65秒加上Time类对象 t3.print_24(); cout<<"\nt1-t2: "; t3=t1-t2; //两个Time类对象相减 t3.print_24(); cout<<"\nt1-70: "; t3=t1-70; //Time类对象减去70秒 t3.print_24(); return0; } 输入描述 无 输出描述 无 输入样例 无 输出样例 t1+t2: 15: 57: 34 t1+65: 02: 35: 05 65+t1: 02: 35: 05 t1-t2: 10: 49: 34 t1-70: 02: 32: 50 我的代码: #include #include usingnamespacestd; classTime { inthour,minute,second; public: intSecCalc() { return(hour*60+minute)*60+second; } Time(inth=0,intm=0,ints=0); voidSetTime(inth=0,intm=0,ints=0); voidprint_12(); voidprint_24(); Timeoperator+(Timet1); friendTimeoperator+(Timet1,intt2); friendTimeoperator+(intt1,Timet2); Timeoperator-(Timet1); friendTimeoperator-(Timet1,intt2); friendTimeoperator-(intt1,Timet2); }; TimeTime: : operator+(Timet1) { returnTime(hour+t1.hour,minute+t1.minute,second+t1.second); } Timeoperator+(Timet1,intt2) { intt=t1.SecCalc(); t+=t2; returnTime(t/60/60,t/60%60,t%60); } Timeoperator+(intt1,Timet2) { intt=t2.SecCalc(); t+=t1; returnTime(t/60/60,t/60%60,t%60); } TimeTime: : operator-(Timet1) { intt=SecCalc()-t1.SecCalc(); if(t<0) { t=-t; } returnTime(t/60/60,t/60%60,t%60); } Timeoperator-(Timet1,intt2) { intt=t1.SecCalc()-t2; if(t<0) { t=-t; } returnTime(t/60/60,t/60%60,t%60); } Timeoperator-(intt1,Timet2) { intt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运算 重载 有关 习题 答案