问题 问答题

请使用“答题”菜单或使用VC6打开考生文件夹proj1下的工程proj1。此工程定义了Stop-Watch(秒表)类,用于表示时、分、秒信息,有构造函数StopWatch()、设置时间函数reset()、并且重载了前置和后置++运算符,用于实现增加秒的功能。程序中位于每个//ERROR************found************下的语句行有错误,请加以改正。改正后程序的输出应该是:
00:00:00
00:01:00
注意:只能修改每个//ERROR************found************下的那一行,不要改动程序中的其他内容。
//源程序
#include<iostream>
#include<iomanip>
using namespace std;
class StopWatch //“秒表”类
int hours,minutes,seconds; //小时、分钟、秒
public:
StopWatch():hours(0),minutes (0),seconds(0)
void reset()hours=minutes=seconds=0;
StopWatch operator++(int) //后置++
StopWatch old=*this;
++(*this);
return old;

//前进1秒
StopWatch& operator++() //前置++
//ERROR************found************
if(seconds++==60)
seconds=0;minutes++;
if(minutes==60)
minutes=0;hours++;


//ERROR************found************
return this:

friend void show(StopWatch);

void show(StopWatch watch)
cout<<setfill(’0’);
cout<<setw(2)<<watch.hours<<’:’<<setw(2)<<watch.minutes<<’:’<<setw(2)<<watch.seconds<<endl;

int main()
StopWatch sw;
show(sw);
for (int i=0; i<59; 1++) sw++;
//ERROR************found************
show(sw++);
return 0:

答案

参考答案:1)if(++seconds==60){
2)return*this;
3)show(++sw);

解析:1)是在前置++运算符重载函数中,所以应该是++secnods而不是seconds++。
2)函数类型是StopWatch对象,所以应该将本对象返回,而不是对象指针。为*this,而非this。
3)题目要求显示的是00:01:00,调用show(sw++)时显示的是00:01:59,故知道该处应该改为调用前置重载运算符show(++sw)。

选择题
单项选择题 A3/A4型题