qq_38210632
我是小小菜鸡
采纳率100%
2017-09-22 03:24

为什么Number<60> minutes; 表示分(0~59)。求大神解答。小弟感激不尽

3
  • ios
  • class
  • namespace
已采纳

#include
#include
using namespace std;

template //数制为base的数
class Number
{
int n; //存放数的当前值
public:
Number(int i):n(i){} //i必须小于base
int advance(int k); //当前值增加k个单位
int value()const{ return n; } //返回数的当前值
};

class TimeOfDay{
public:
Number hours; //小时(0~23)
Number minutes; //分(0~59)
//**1** **********found**********
Number; //秒(0~59)
Number milliseconds; //毫秒(0~999)

TimeOfDay(int h=0, int m=0, int s=0, int milli=0)
:hours(h),minutes(m),seconds(s),milliseconds(milli){}
void advanceMillis(int k){ advanceSeconds(milliseconds.advance(k)); } //前进k毫秒
void advanceSeconds(int k) //前进k秒
{
//**2** **********found**********
advanceMinutes(seconds.advance(k));
}
void advanceMinutes(int k){ advanceHour(minutes.advance(k)); } //前进k分钟
void advanceHour(int k){ hours.advance(k); } //前进k小时
void show()const{ //按“小时:分:秒.毫秒”的格式显示时间
int c=cout.fill('0'); //将填充字符设置为'0'
cout<<setw(2)<<hours.value()<<':' //显示小时
<<setw(2)<<minutes.value()<<':' //显示分
<<setw(2)<<seconds.value()<<'.' //显示秒
<<setw(3)<<milliseconds.value(); //显示毫秒
cout.fill(c); //恢复原来的填充字符
}
};

template
int Number::advance(int k)
{
n+=k; //增加k个单位
int s=0; //s用来累计进位
//**3** **********found**********
while(n>=base)_____________________ //n到达或超过base即进位
return s; //返回进位
}

int main()
{
TimeOfDay time(1,2,3,4); //初始时间:1小时2分3秒4毫秒
time.show(); //显示时间
time.advanceHour(5); //前进5小时
time.advanceSeconds(122); //前进122秒(2分零2秒)
time.advanceMillis(1017); //前进1017毫秒(1秒零17毫秒)
cout<<endl;
time.show(); //显示时间
cout<<endl;
return 0;
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • Junpb Junpb 4年前

    所有程序的数组性问题都是以0开始,一开始定义的60指的是数组内有60个数。而数字的计数是从0开始,所以有59为结束。
    至于为什么是从0开始,是因为本身程序到最后都要翻译成机器语言,机器才能识别。
    而机器是以电流的高低来确定0和1,也就是计算机使用二进制的原因
    也就是说机器的计数是从0x0000的全低电位开始计数,即为第一个数。

    点赞 评论 复制链接分享
  • niaonao niaonao 4年前

    程序的反人类设计,数组从0开始,list从0开始
    没有1,2,3
    有0,1,2,3
    ,日期也是这样,getMouth获取的月份得+1,,
    0,1,2,3,4,5,6,7,8,9,10,11,而不是1到12

    点赞 评论 复制链接分享
  • NemoMAX1 leftrist 4年前

    数组下标的最小值称为下界,在C语言中总是为0。数组下标的最大值称为上界,在c语言中数组上界为数组定义值减1。---摘抄自数据结构简明教程

    点赞 评论 复制链接分享
  • qq_34287165 汤圆子不加糖 4年前

    定义分钟区间就是0~59

    点赞 评论 复制链接分享