-2

私はオーバーロードされた後置演算子に day = 1 を作成させようとしています.365日目に最初に切り取られたのは私がプロトタイプを作成していて、2番目のスニペットは実際のコード定義ですが、これを理解できないようです. どんな助けでも大歓迎です。基本的に、プログラムはユーザーに日付を求める日付を尋ねます。

その日は 364 で、12 月 30 日になります。

++ 演算子を使用して、1 日が 365 であるオブジェクトをインクリメントするたびに、その日を 1 日目に戻すようにします。オブジェクトが 365 でない場合は、1 日ずつインクリメントするだけです。

if(day == 365) に変更するたびに、同じことを行いますが、それでも1ずつ増加しますが、1ではなく366になります。

助けてくれてありがとう。これは宿題ですが、私は踏みにじられました。編集:より多くのコードを投稿しました。助けてくれてありがとう

#include<iostream>
#include<string>

using namespace std;

class DayOfYear {            
    public:
        DayOfYear(int d);
        void print();
        static string month;
        DayOfYear();
        DayOfYear(string m, int d);
        DayOfYear operator++(int);
        int day;    
};

string DayOfYear::month;

DayOfYear DayOfYear::operator++(int) {
    DayOfYear temp = *this;    

    if (day == 365) {
        day = 1;
    } else {
        day++;
    }

    return temp;
}

DayOfYear::DayOfYear(string m, int d) {
    month = m;
    day = d;

    if (m == "January" && d > 31) {
        cout << "ERROR: PROGRAM TERMINATING!" << endl;
        system("pause");
        exit(0);
    } else if (m == "February" && d > 28) {
        cout << "ERROR INVALID DATE: PROGRAM TERMINATING!" << endl;
        system("pause");
        exit(0);
    } else if (m == "March" && d > 31) {
        cout << "ERROR INVALID DATE: PROGRAM TERMINATING!" << endl;
        system("pause");
        exit(0);
    } else if (m == "April" && d > 30) {
        cout << "ERROR INVALID DATE: PROGRAM TERMINATING!" << endl;
        system("pause");
        exit(0);
    } else if (m == "May" && d > 31) {
        cout << "ERROR INVALID DATE: PROGRAM TERMINATING!" << endl;
        system("pause");
        exit(0);
    } else if (m == "June" && d > 30) {
        cout << "ERROR INVALID DATE: PROGRAM TERMINATING!" << endl;
        system("pause");
        exit(0);
    } else if (m == "July" && d > 31) {
        cout << "ERROR INVALID DATE: PROGRAM TERMINATING!" << endl;
        system("pause");
        exit(0);
    } else if (m == "August" && d > 31) {
        cout << "ERROR INVALID DATE: PROGRAM TERMINATING!" << endl;
        system("pause");
        exit(0);
    } else if (m == "September" && d > 30) {
        cout << "ERROR INVALID DATE: PROGRAM TERMINATING!" << endl;
        system("pause");
        exit(0);
    } else if (m == "October" && d > 31) {
        cout << "ERROR INVALID DATE: PROGRAM TERMINATING!" << endl;
        system("pause");
        exit(0);
    } else if (m == "November" && d > 30) {
        cout << "ERROR INVALID DATE: PROGRAM TERMINATING!" << endl;
        system("pause");
        exit(0);
    } else if (m == "December" && d > 31) {
        cout << "ERROR INVALID DATE: PROGRAM TERMINATING!" << endl;
        system("pause");
        exit(0);
    }

    cout << month << " " << day << endl; 
}

DayOfYear::DayOfYear() {
    cout << "Enter a day number." << endl;
    cin >> day;
    print();
}

DayOfYear::DayOfYear(int d) {
    day = d;

    while (d > 365 || d < 1) {
        cout << "Day can't be higher than 365 and must be at least one. " << endl;
        cin >> d; 
        day = d; 
    }

    print();
}

void DayOfYear::print() {
    if (day > 0 && day < 32) //jan 31 
    {
        month = "January";
        cout << month << " " << 31 + day - 31 << endl;
    }
    else if (day > 31 && day < 60) // feb 28
    {
        month = "February";
        cout << month << " " << day - 31  << endl;
    }
    else if (day > 59 && day < 91) // march 31
    {
        month = "March";
        cout << month << " " << day - 59 << endl;
    }
    else if (day > 90 && day < 121) // april 30 
    {
        month = "April";
        cout << month << " " << day - 90 << endl;
    }
    else if (day > 120 && day < 152) //may 31
    {
        month = "May";
        cout << month << " " << day - 120 << endl;
    }
    else if (day > 151 && day < 182) //june 30
    {
        month = "June";
        cout << month << " " << day - 151 << endl;
    }
    else if (day > 181 && day < 213) //july 31
    {
        month = "July";
        cout << month << " " << day - 181 << endl;
    }
    else if (day > 212 && day < 244) // august 31
    {
        month = "August";
        cout << month << " " << day - 212 << endl;
    }
    else if (day > 243 && day < 274) // sept 30
    {
        month = "September";
        cout << month << " " << day - 243 << endl;
    }
    else if (day > 273 && day < 305) // oct 31
    {
        month = "October";
        cout << month << " " << day - 273 << endl;
    }
    else if (day > 304 && day < 335) // nov 30
    {
        month = "November";
        cout << month << " " << day - 304  << endl;
    }
    else if (day > 334 && day < 366) //dec 31
    {
        month = "December";
        cout << month << " " << day - 334 << endl;
    }
}


int main() {
    DayOfYear day;

    cout << day.day << endl; 
    cout << day.day ++ << endl;
    cout << day.day << endl;

    system("pause"); 
    return 0;
}
4

2 に答える 2

5
if(day = 365)
{day = 1;}
else
{day ++;}

これはあなたが思うことをしません。=代入演算子です。==比較演算子になります。現在、その式は変数に値365を割り当てており、それが実行される をday返します(そうでないものはすべてです)365day = 1;0true

これはあなたがしたいことです:

if (day == 365) {
    day = 1;
} else {
    day++;
}

コードの問題は、クラスのポストフィックスを定義しているにもかかわらず、クラスのメンバーでoperator++この演算子を使用していることです。int day

ではint main、するべきではなくday.day++、するべきですday++

于 2013-07-18T22:16:02.820 に答える
2

operator++オーバーロードをどこにも呼び出していません。

DayOfYear day;
cout << day.day << endl; 
cout << day.day ++ << endl;
cout << day.day << endl;

day.daydayDayOfYearクラスのメンバーなのでday.day++、通常の のインクリメントですint。代わりにこれを行いたい:

DayOfYear day;
cout << day.day << endl; 
cout << (day++).day << endl;
cout << day.day << endl;
于 2013-07-18T23:21:00.753 に答える