我在用Date类的对象编写程序。当我将班级的日期打印到屏幕上时,有三个选项默认(M / D / Y),长(月,日年)和两位数字(mm / dd / yy)。我已经解决了每个选项的代码,但是在调用SetFormat()函数时无法更改格式。我希望SetFormat的默认参数为'D',以便在没有指定参数的情况下,它处于默认格式,但是在主菜单中调用SetFormat()时,它将切换格式。
这是我的.cpp文件的一部分:
void Date::Show()
{
if (SetFormat('D'))
{
cout << month << '/' << day << '/' << year;
}
if (SetFormat('T'))
{
if(month < 10){
cout << 0 << month << '/';
}else
cout << month << '/';
if (day < 10) {
cout << 0 << day << '/' << (year % 100);
} else
cout << day << '/' << (year % 100);
}
if (SetFormat('L'))
{
LongMonth();
cout << " " << day << ", " << year;
}
}
bool Date::SetFormat(char f)
{
format = f;
if (f == 'T')
return true;
if (f == 'D')
return true;
if (f == 'L')
return true;
else
return false;
}
这是我的.h文件的一部分:
class Date{
public:
explicit Date(int m = 1, int d = 1, int y = 2000);
void Input();
void Show();
bool Set(int m, int d, int y);
bool SetFormat(char f = 'D');
该程序现在只是忽略我的'if'语句,当我在main中调用函数SetFormat()时,它会以背对背的方式打印所有3种格式。
最佳答案
问题是您同时将SetFormat()
用作“设置”功能以及“获取”功能。我建议有两个功能。
void SetFormat(char f);
char GetFormat() const;
并适当地使用它们。
在
Date::Show()
中,使用GetFormat()
或仅使用成员变量的值。在
main
中,使用SetFormat()
。void Date::Show()
{
// Need only one of the two below.
// char f = GetFormat();
char f = format;
if (f == 'D')
{
cout << month << '/' << day << '/' << year;
}
else if (f == 'T')
{
if(month < 10){
cout << 0 << month << '/';
}else
cout << month << '/';
if (day < 10) {
cout << 0 << day << '/' << (year % 100);
} else
cout << day << '/' << (year % 100);
}
else if ( f == 'L')
{
LongMonth();
cout << " " << day << ", " << year;
}
}
void Date::SetFormat(char f)
{
format = f;
}
char Date::GetFormat() const
{
return format;
}
并在
main
中:Date date;
date.SetFormat('L');
date.Show();
当然,您应该检入
SetFormat()
和Show()
以确保格式有效,如果不是这种情况,请执行一些操作。