问答题 编程题(20分) 【题目】 试定义一个时间类time,具体要求如下: (1)私有数据成员。 ?int h,m,s:分别表示时、分和秒。 ?char *str_t:存放时间的字符串,格式为"hh:mm:ss",即"时:分:秒"。 (2)公有成员函数。 ?time(int hh=0,int mm=0,int ss=0):构造函数,利用参数hh、mm和ss分别初始化成员h、m和s,并为字符串str_t分配9个字节的动态存储空间。要检查参数hh、mm和ss的合法性,即0≤hh<24,0≤mm<60,0≤ss<60,如果不合法,则采用相应的缺省参数值。 ?~time():析构函数,撤销str_t所占用的动态存储空间。 ?void convert():利用全局函数itoa()将成员h、m和s转换为字符串"hh:mm:ss"的形式,并存储在str_t中。 ?void set_t(int hh,int mm,int ss):利用参数hh、mm和ss分别设置成员h、m和s的值,同时调用成员函数convert()设置成员str_t。注意检查参数的合法性。 ?void print():输出字符串str_t,按输出示例中的格式输出时间。 (3)char *itoa(int n):全局函数,将整数n转换为字符串形式并返回。只考虑n至多为两位数的情形:当n为一位数时,如n=2,将n转换为"02"的形式;当n为两位数时,如n=59,将n转换为"59"的形式。 (4)在主函数中对该类进行测试。 输出示例: 00:00:00 12:05:30 【要求】 源程序文件名必须为myfb.cpp,并放在T盘根目录下,供阅卷用。
【正确答案】 #inelude #include class time{ int h,m,s; char *str_t; public: - time(int hh=0,int mm=0,int ss=0) :h(hh>=0 && hh<24? hh:0),m(mm>=0 && mm<60? mm:0),s(ss>=0 &&ss<60? ss:0),str_t(new char[9]) { *str_t='/0'; } ~time() {delete []str_t; } void set_t(int,int,int); void convert(); void print() const {cout<=0 && hh<24? hh:0),m=(mm>=0 && mm<60? mm:0),s=(ss>=0 && ss< 60? ss:0); *str_t='/0': convert(); } void time::convert() { char *tmp; tmp=itoa(h); strcat(str t,tmp); strcat(str_t,":"); tmp=itoa(m); strcat(str_t,tmp); strcat(str_t,":"); tmp=itoa(s); strcat(str_t,tmp); delete []tmp; } void main() { time t1; t1.convert(); t1.print(); t1.set_t(11,5,30); t1.print(); }
【答案解析】