重载构造函数和变量传递的问题

Trouble with overloaded constructors and variable passing

本文关键字:问题 变量 构造函数 重载      更新时间:2023-10-16
 #include <iostream>
 #include <string>

 class Date
 {
   public:
    Date(int, int, int);
    Date(std::string, int, int);
    void print();
    void printFullDate();
    int getMonth();
    int getDay();
    int getYear();
    void setMonth(int);
    void setDay(int);
    void setYear(int);

    private:
    int mm,dd,yy;
    std::string mstr;
 };

这是我的类日期的头文件

以下是实现

#include <iostream>
#include "Date.h"
using namespace std;
Date::Date(int mm, int dd, int yy)
{
    if(mm < 1 || mm > 12 )
     {
        cout << "Please Enter a Valid Month (1-12)";
        cin >> mm;
     }
    if(mm == 1 || mm == 3 || mm == 5 || mm == 7 || mm == 8 || mm == 10 || mm == 12)
        {
            if(dd < 1 || dd > 31)
            {
                cout << "Please Enter a Valid Date For the Month Entered(1-31)";
                cin >> dd;
            }
        }
    if(mm == 4 || mm == 6 || mm == 9 || mm == 11)
    {
        if(dd < 1 || dd >30)
        {
            cout << "Please Enter a Valid Date for the Month Entered(1-30)";
            cin >> dd;
        }
    }
    if ( (yy % 4 == 0 && yy % 100 != 0) || ( yy % 400 == 0))
    {
        if(mm == 2)
        {
            if( dd < 1 || dd > 29)
            {
                cout << "Please Enter a Valid Date for the Month Entered(1-29)";
                cin >> dd;
            }
        }

    }
    else 
    {
        if(mm == 2)
        {
            if(dd < 1 || dd > 28)
            {
                cout << "Please Enter a Valid Date for the Month Entered(1-28)";
                cin >> dd;
            }
        }
    }   
    if (yy < 1)
    {
        cout << "Please Enter a Valid Date of the era AD";
        cin >> yy;
    }
    switch(mm) 
    {
        case 1:
        mstr = "January";
        break;
        case 2:
        mstr = "February";
        break;
        case 3:
        mstr = "March";
        break;
        case 4:
        mstr = "April";
        break;
        case 5:
        mstr = "May";
        break;
        case 6:
        mstr = "June";
        break;
        case 7:
        mstr = "July";
        break;
        case 8:
        mstr = "August";
        break;
        case 9:
        mstr = "September";
        break;
        case 10:
        mstr = "October";
        break;
        case 11:
        mstr = "November";
        break;
        case 12:    
        mstr = "December";
        break;
    }

}
Date::Date(string mstr, int dd, int yy)
{
}
void Date::print()
{
    cout << "MM/DD/YYYY: " << mm << "/" << dd << "/" << yy << endl;
}
void Date::printFullDate()
{
    cout << "Month DD, YYYY: " << mstr << " " << dd << ", " << yy << endl;
    cout << "**********" << endl << endl;
}
void Date::setDay(int day)
{
    dd = day;
}
void Date::setMonth(int month)
{
    mm = month;
}
void Date::setYear(int year)
{
    yy = year;
}
int Date::getDay()
{
    return dd;
}
int Date::getMonth()
{
    return mm;
}
int Date::getYear()
{
    return yy;
}

当我调用函数 Date(int,int,int( 时,它会很好地运行所有内容。但是,当我调用 print 函数时,变量不会保留构造函数中分配的值。当构造函数更正月、日或年时,该数据不会在打印时输出。而是输出原始未更改的值。我相信一旦传递给构造函数的变量对于整个类应该保持不变。 我迷路了。任何帮助将不胜感激。

那是因为你的构造函数的参数...

Date::Date(int mm, int dd, int yy)

。是与具有相同名称的类成员变量不同的变量。 我通常用尾随下划线命名成员,例如 mm_, dd_, yy_ - 然后在构造函数的末尾,您可以将其分配给...

mm_ = mm; dd_ = dd; yy_ = yy; mstr_ = mstr;