看C++ primer plus有点不明白程序。请各位大神指教,谢谢。
问题:1、public中,Time(inth,intm=0)这句里的为什么不写h=0呢?2、主函数中,total,diff重新写,为什么?#include<iostrea...
问题:1、public中,Time(int h,int m=0)这句里的为什么不写h=0 呢?
2、主函数中, total,diff重新写,为什么?
#include<iostream>
class Time
{
private:
int hours;
int minutes;
public:
Time();
Time(int h,int m=0);
void AddMin(int m);
void AddHr(int h);
void Reset(int h=0,int m=0);
Time operator+(const Time & t)const;
Time operator-(const Time & t)const;
Time operator*(double n)const;
void Show()const;
};
Time::Time()
{
hours=minutes=0;
}
Time::Time(int h,int m)
{
hours=h;
minutes=m;
}
void Time::AddMin(int m)//关键点
{
minutes+=m;
hours+=minutes/60;
minutes%=60;
}
void Time::AddHr(int h)
{
hours+=h;
}
void Time::Reset(int h,int m)
{
hours=h;
minutes=m;
}
Time Time::operator+(const Time & t)const //陌生点
{
Time sum;
sum.minutes=minutes+t.minutes;
sum.hours=hours+t.hours+sum.minutes/60;
sum.minutes%=60;
return sum;
}
Time Time::operator-(const Time & t)const
{
Time diff;
int tot1,tot2;
tot1=t.minutes+60*t.hours;
tot2=minutes+60*hours;
diff.minutes=(tot2-tot1)%60;
diff.hours=(tot2-tot1)/60;
return diff;
}
Time Time::operator *(double mult) const
{
Time result;
long totalminutes=hours*mult*60+minutes*mult;
result.hours=totalminutes/60;
result.minutes=totalminutes%60;
return result;
}
void Time::Show()const
{
std::cout<<hours<<"hours."<<minutes<<"minutes";
}
int main()
{
using std::cout;
using std::endl;
Time weeding(4,35);
Time waxing(2,47);
Time total;
Time diff;
Time adjusted;
cout<<"weeding time=";
weeding.Show();
cout<<endl;
cout<<"waxing time=";
waxing.Show();
cout<<endl;
cout<<"total work time=";
total=weeding+waxing;
total.Show();
cout<<endl;
diff=weeding-waxing;
cout<<"weeding time-waxing time=";
diff.Show();
cout<<endl;
adjusted=total*1.5;
cout<<"adjusted work time=";
adjusted.Show();
cout<<endl;
return 0;
} 展开
2、主函数中, total,diff重新写,为什么?
#include<iostream>
class Time
{
private:
int hours;
int minutes;
public:
Time();
Time(int h,int m=0);
void AddMin(int m);
void AddHr(int h);
void Reset(int h=0,int m=0);
Time operator+(const Time & t)const;
Time operator-(const Time & t)const;
Time operator*(double n)const;
void Show()const;
};
Time::Time()
{
hours=minutes=0;
}
Time::Time(int h,int m)
{
hours=h;
minutes=m;
}
void Time::AddMin(int m)//关键点
{
minutes+=m;
hours+=minutes/60;
minutes%=60;
}
void Time::AddHr(int h)
{
hours+=h;
}
void Time::Reset(int h,int m)
{
hours=h;
minutes=m;
}
Time Time::operator+(const Time & t)const //陌生点
{
Time sum;
sum.minutes=minutes+t.minutes;
sum.hours=hours+t.hours+sum.minutes/60;
sum.minutes%=60;
return sum;
}
Time Time::operator-(const Time & t)const
{
Time diff;
int tot1,tot2;
tot1=t.minutes+60*t.hours;
tot2=minutes+60*hours;
diff.minutes=(tot2-tot1)%60;
diff.hours=(tot2-tot1)/60;
return diff;
}
Time Time::operator *(double mult) const
{
Time result;
long totalminutes=hours*mult*60+minutes*mult;
result.hours=totalminutes/60;
result.minutes=totalminutes%60;
return result;
}
void Time::Show()const
{
std::cout<<hours<<"hours."<<minutes<<"minutes";
}
int main()
{
using std::cout;
using std::endl;
Time weeding(4,35);
Time waxing(2,47);
Time total;
Time diff;
Time adjusted;
cout<<"weeding time=";
weeding.Show();
cout<<endl;
cout<<"waxing time=";
waxing.Show();
cout<<endl;
cout<<"total work time=";
total=weeding+waxing;
total.Show();
cout<<endl;
diff=weeding-waxing;
cout<<"weeding time-waxing time=";
diff.Show();
cout<<endl;
adjusted=total*1.5;
cout<<"adjusted work time=";
adjusted.Show();
cout<<endl;
return 0;
} 展开
展开全部
答:1.m=0,给出的是缺省值,如果对象初始化的时候没有给出m的值,m的值就为0.
至于h为什么不为0,当然是程序的需要,如果你觉得h需要给出默认值就写,没有什么问题的。只不过调用的时候如果两个参数都没给出初值,那么就会产生歧义。这里具体的意思就是:你可以给出小时不给分钟,那么分钟默认为0;但不能给出分钟而不给小时。
2.这两个变量并不是重新写。而是:在类的成员函数里的那两个同名变量的作用域只在成员函数中,而主函数中的变量作用域只在主函数中。他们只是名字相同,其实是完全不同的两个变量。
至于h为什么不为0,当然是程序的需要,如果你觉得h需要给出默认值就写,没有什么问题的。只不过调用的时候如果两个参数都没给出初值,那么就会产生歧义。这里具体的意思就是:你可以给出小时不给分钟,那么分钟默认为0;但不能给出分钟而不给小时。
2.这两个变量并不是重新写。而是:在类的成员函数里的那两个同名变量的作用域只在成员函数中,而主函数中的变量作用域只在主函数中。他们只是名字相同,其实是完全不同的两个变量。
展开全部
第一问题:
在Time类中有两个构造函数;一个是默认的,另一个是Time(int h,int m=0);若在词句中将h也设为默认值,即
Time(int h=0,int m=0);
那么在主函数中
Time diff;
表示的是什么呢? 他可以默认的构造函数,即Time(),也可是Time(int h =0,int m=0);在C++这种情况是要被禁止,编译器不知道使用的是哪一个构造函数。因此不能在Time(int h, int m)将两个成员设为默认。
第二个问题:
在主函数中total 和 diff 调用的是Time类中operator+(const Time & ) const 和 operator-(const Time &)const ;以及默认的 operator=(const Time )
例如:
total=weeding+waxing;
就是:
weeding.operator+(waxing)
两者之和生成一个临时Time类,在同通过Time operator=(const Time) 赋给 total
在Time类中有两个构造函数;一个是默认的,另一个是Time(int h,int m=0);若在词句中将h也设为默认值,即
Time(int h=0,int m=0);
那么在主函数中
Time diff;
表示的是什么呢? 他可以默认的构造函数,即Time(),也可是Time(int h =0,int m=0);在C++这种情况是要被禁止,编译器不知道使用的是哪一个构造函数。因此不能在Time(int h, int m)将两个成员设为默认。
第二个问题:
在主函数中total 和 diff 调用的是Time类中operator+(const Time & ) const 和 operator-(const Time &)const ;以及默认的 operator=(const Time )
例如:
total=weeding+waxing;
就是:
weeding.operator+(waxing)
两者之和生成一个临时Time类,在同通过Time operator=(const Time) 赋给 total
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询