2013-10-20 85 views
2

所以在我的程序中我有兩個變量叫今天和生日。這兩個變量都是DayOfYear類型。 DayOfYear類同時包含日期和月份。因此,當我同時調用today.setday和today.setmonth和birthday.setday和birthday.setmonth時,它會將值分配給由類爲每個變量創建的私有變量。我的老師希望我能夠輸入主要功能cout<<today,並讓它爲這個變量打印日期和月份,我將如何設置?cout一個類定義的變量

#include <iostream> 
using namespace std; 

class DayOfYear 
{ 
    public: 
     DayOfYear(); 
     void setDay(); 
     void setMonth(); 
     void setYear(); 
     void output(); 
     int getMonth(); 
     int getDay(); 

    private: 
     int tempday; 
     int month; 
     int day; 
     int year; 
     int leapyear; 
     int cont; 
}; 

int main() 
{ 
    DayOfYear today, birthday; 

    cout <<"what year were you born" <<endl; 
    birthday.setYear(); 
    cout <<"what year is it now" <<endl; 
    today.setYear(); 

    cout << "Enter today's date:\n"; 
     today.setMonth(); 
     today.setDay(); 

    cout << "Enter your birthday:\n"; 
     birthday.setMonth(); 
     birthday.setDay(); 

    cout << "Today's date is "; 
    today.output(); 
    cout << "Your birthday is "; 
    birthday.output(); 

    if (today.getMonth() == birthday.getMonth() && today.getDay() == birthday.getDay()) 
    // remove .operators (make boolean friend function that takes care of everything 
    //this is where i need the help 

     cout << "Happy Birthday!\n"; 
    else 
     cout << "Happy Unbirthday!\n"; 

    return 0; 
} 
DayOfYear::DayOfYear() 
{ 
    month = 1; 
    day = 1; 
    year = 1970; 
    leapyear = 0; 
    tempday = 0; 
} 

void DayOfYear::output() 
{ 
    cout << "month = " << month 
     << ", day = " << day << endl; 
} 

void DayOfYear::setYear() 
{ 
    cin >> year; 

    if (year%400 == 0 || year%4 == 0 && year%100 != 0) 
    { 
     leapyear = 1; //set leapyear to true if conditions are met 
    } 

} 

void DayOfYear::setDay() 
{ 

    do 
    { 

     cout << "Enter the day of the month: "; 
     cin >> tempday; 

     if(tempday > 28 && month == 2 && leapyear == 0) 
     { 
      cout << "invlaid day" << endl; 
      tempday = 0; 
     } 

     else if(tempday > 30 && month == 4 ||tempday > 30 && month == 6 || tempday > 30 && month == 9 || tempday > 30 && month == 11) 
     { 
      cout << "invlaid day" << endl; 
      tempday = 0; 
     } 

     else if(tempday > 31 && month == 1 || tempday > 31 && month == 3 ||tempday > 31 && month == 5 || tempday > 31 && month == 7 || 
       tempday > 31 && month == 8 || tempday > 31 && month == 10 || tempday > 31 && month == 12) 
     { 
      cout << "invlaid day" << endl; 
      tempday = 0; 
     } 

     else 
     { 
      day = tempday; 
     } 

    } while(tempday == 0); 
} 

void DayOfYear::setMonth() 
{ 
    double invalid; 

    do 
    { 
     cout << "Enter month as a number: "; 
     cin >> month; 
     if (month > 12) 
     { 
      cout << "invalid month" << endl; 
      invalid = 1; 
     } 
     else if (month <= 12 && month >= 1) 
     { 
      invalid = 0; 
     } 

    } while (invalid == 1); 

} 
int DayOfYear::getMonth() 
{ 
    return month; 
} 

int DayOfYear::getDay() 
{ 
    return day; 
} 

回答

2
class DayOfYear 
{ 
public: 
    friend bool operator ==(const DayOfYear& lhs, const DayOfYear& rhs) const 
    { 
     return lhs.getMonth() == rhs.getMonth() 
      && lhs.getDay() == rhs.getDay(); 
    } 

    ... 
}; 

... 

if (today == birthday) 
{ 
    // ... 
} 
3

你需要重載操作< <:

std::ostream& operator<<(std::ostream& os, const DayOfYear& d) 
{ 
    os << "month = " << d.month << ", day = " << d.day << std::endl; 
    return os; 
} 

this question參見上的更多信息。

使這個DayOfYear過的朋友:

friend std::ostream& operator<<(std::ostream&, const DayOfYear&); 

這是必要的,以確保操作人員可以訪問私有成員的DayOfYear類。

我也看到,在源代碼中,你提到你也需要重載operator==。原則是一樣的,我所聯繫的問題也應該對此有所幫助。