我在用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()以确保格式有效,如果不是这种情况,请执行一些操作。

09-27 21:28