題目:定義日期類date,包括年、月、日3個成員變數,在其中過載運算子「+」,「-」,「++」,「--」。(注意:需要考慮每個月不同天數及閏年問題)。
題目為《物件導向程式設計》(c++語言)--李愛華 程磊教材第七章課後題
好的,我們來分析一下題目,對類的宣告進行功能定向,乙個是對四個運算子的過載,這裡我們遵循c++封裝的特性,採用過載為成員函式的方法。
形如:
t operator @(參數列)return false;
}那麼具體的天數迴圈我們放到運算子過載函式裡面用迴圈來實現我們來看下完整的類的宣告:
這兩個定義之後,其他的就簡單了,我們來看"+"和"-"。順便把其他函式一起實現了:class date
else
break;
case 12:
if (day < 31)
else
break;
case 4:
case 6:
case 9:
case 11:
if (day < 30)
else
break;
case 2:
if (isleapyear(year))
}else if (day<28)
else
break;
}return *this;
}date date::operator--(int)
else day -= 1;
break;
case 3:
if (day != 1) day -= 1;
else
else
}case 2:
case 4:
case 6:
case 8:
case 9:
case 11:
if (day != 1) day -= 1;
else
break;
case 5:
case 7:
case 10:
case 12:
if (day != 1) day -= 1;
else
break;
} return *this;
}
date date::operator+(int days) //days天之後的日期
return temp;
} date date::operator-(int days) //days天之前的日期
return temp;
} bool date::isleapyear(int year)
return false;
} void date::showdate()
因為本篇主要描述運算子過載和date類的實現,並未涉及別的複雜的知識點,所以我們到這就直接給出主測試函式,來進行測試這個類的功能:
int main()
下面將程式整合,因為程式簡短,就不分檔案程式設計,直接給出.cpp檔案執行**:
//created by kong at 2019-11-02
#includeusing namespace std;
class date
date(const date &d)
~date(){}
date operator++(int)
else
break;
case 12:
if (day < 31)
else
break;
case 4:
case 6:
case 9:
case 11:
if (day < 30)
else
break;
case 2:
if (isleapyear(year))
}else if (day<28)
else
break;
}return *this;
}date operator--(int)
else day -= 1;
break;
case 3:
if (day != 1) day -= 1;
else
else
}case 2:
case 4:
case 6:
case 8:
case 9:
case 11:
if (day != 1) day -= 1;
else
break;
case 5:
case 7:
case 10:
case 12:
if (day != 1) day -= 1;
else
break;
} return *this;
} date operator+(int days) //days天之後的日期
return temp;
} date operator-(int days) //days天之前的日期
return temp;
} bool isleapyear(int year)
return false;
} void showdate()
};int main()
執行結果:
C 過載運算子
運算子過載是一種形式的c 多型。在c 中,編譯器有能力把乙個由資料 物件和操作符共同組成的表示式,解釋為對乙個全域性或成員函式的呼叫。該全域性或成員函式被稱為操作符函式,通過重定義操作符函式,可以實現針對自定義型別 結構,類 的運算法則,並使之與內建型別一樣參與各種表示式。過載運算子可使 看起來更加...
C 過載運算子
本文主要講述加號運算子 自增運算子 流提取運算子運 流插入運算子 先給出vector類 class vector 建構函式 vector const vector v 拷貝建構函式 vector operator const vector v 過載 vector operator 過載前置自增運算子...
C 過載運算子
過載的運算子是帶有特殊名稱的函式,函式名是由關鍵字 operator 和其後要過載的運算子符號構成的。與其他函式一樣,過載運算子有乙個返回型別和乙個引數列表。如果我們定義的函式為類的成員函式 box operator const box 如果我們定義的函式為非成員函式,那麼我們需要為每次操作傳遞兩個...