如何在成员函数中包括默认参数?

时间:2019-02-07 03:43:49

标签: c++

我正在编写一个带有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'语句,当我在主程序中调用函数SetFormat()时,它会以背对背的方式打印所有3种格式。

2 个答案:

答案 0 :(得分:1)

SetFormat(char)函数为每个选项返回true,因此它将依次打印每个选项。

答案 1 :(得分:1)

问题是您同时将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()以确保格式有效,如果不是这种情况,请执行某些操作。