C 實現日期類

2021-10-22 10:47:10 字數 4099 閱讀 8655

預設成員函式的應用場景:

date date1;   //當我們例項化乙個物件date1時,就會呼叫 建構函式,所以我們可以使用建構函式對物件進行初始化。

date date2 = date1;   //當我們例項化物件date2的同時將乙個已存在的物件的內容拷貝過來,就會呼叫拷貝建構函式。

date date3;   date3 = date1;  //乙個物件往往是乙個複雜的結構體(c語言叫法),我們希望可以將乙個物件(結構體)當做乙個普通變數來操作,甚至希望其操作方式可以被我們所規定,此時就要用到「操作符過載函式」,這裡只是給出了  =  的過載函式。

析構函式:我們在例項化乙個物件後,其在記憶體中就被分配了空間。我們程式結束後(或者當該物件的生命週期結束時),我們需要釋放這一部分空間,這就會呼叫析構函式。物件析構的順序嚴格按照例項化的順序進行析構。

date::date(int year, int month, int day)

date::date(const date& d)

date& date::operator=(const date& d)

return *this;

}

date::~date()

思路:這個比較簡單,只需要判斷二個物件的私有成員物件值是否相等即可。

bool date::operator==(const date& d)

else

}

思路:日期類的前置++,我們認為是將天數++,再返回。 

這裡需要注意的是:

(1)天數++後,需要對日期進行更新,防止出現32號這種尷尬的情況。

(2)這裡返回*this,相比較在這裡構造乙個臨時變數再返回臨時變數,可以減少一次拷貝重構的次數,提高程式的執行效率。

date& date::operator++()  //前置++

//日期更新函式

void date::datedayup() //日期改變後的更新,只適用於日期++ --

if (this->_day == 0)

}

思路:後置++是先使用物件的值,再讓原物件++。 所以我們先建立乙個臨時物件,承接原物件,再讓原物件++,最後返回臨時變數的內容。

在過載++運算子時,operator++(int)表示後置++,operator++()表示前置++,這是規定,不可混淆。

date date::operator++(int) //後置++

思路:--運算子的過載和++運算子的過載類似。

date& date::operator--() //前置--

date date::operator--(int) //後置--

思路:乙個日期類物件》另乙個日期類物件。我們需要從year開始比較,再比較month,最後比較day。

bool date::operator>(const date& d)

else if (this->_year == d._year)

else if (this->_month == d._month)

else

}else

}else

}

bool date::operator < (const date& d)

else if (this->_year == d._year)

else if (this->_month == d._month)

else

}else

}else

}

bool date::operator != (const date& d)

else

}

注意:我們寫》=運算子過載時,使用的是內聯函式,內聯函式必須與定義語句在乙個資料夾中。

inline bool date::operator >= (const date& d)

else

}

bool date::operator <= (const date& d)

else

}

思路:乙個日期類物件+乙個自定義天數,返回更新後的日期。

//獲取月天數 函式

int date::getmonthday(int year, int month)

if (month == -1)

if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)

else if (month == 4 || month == 6 || month == 9 || month == 11)

else

else

}}//判斷閏年的函式

int date::dateleapyear(int year) //判斷是否為閏年

} else

}return 0;

}//+= 運算子過載函式

date& date::operator+=(int day)

this->_day += day;

while (this->_day > getmonthday(this->_year, this->_month)) //加的超過一月的最大天數

//月份加完很有可能超過12個月(但不會超過24個月,也就是year最多+1),此時需要再做出判斷

return *this;

}

需要注意的是:我們必須建立臨時物件,否則將會改變原物件的值,這是錯誤的。

date date::operator+(int day)

date& date::operator-=(int day)

this->_day -= day;

this->dateup(); //更新日期

while (this->_day + getmonthday(this->_year, this->_month - 1) < 0)

this->_month--;

this->dateup(); //更新日期,防止月份低於0

this->_day += getmonthday(this->_year, this->_month);

this->dateup(); //更新日期

C 實現日期類

功能 實現日期的簡單操作 基本的成員函式 建構函式,拷貝建構函式,析構函式,賦值運算子過載,操作符過載 兩個日期間比較大小 日期類功能函式 1 計算乙個日期加上多少天數後的日期 2 把該日期改為加上指定數目的天數後的日期 3 乙個日期減上多少天數後的日期 4 把該日期改為減去指定數目的天數後的日期 ...

C 實現日期類

date 日期 類 練習實現類的成員函式。運算子的過載 date.h include class date date int year,int month,int day 全預設建構函式 date const date d 拷貝構造 date operator const date d 賦值運算子的...

借助c 實現日期類

本篇部落格借用c 簡單實現乙個日期類 其中包括日期計算器,日期比較大小。接下來我將注釋寫到 中方便理解。date.h pragma once class date 拷貝建構函式 date const date d return this 析構函式 date 列印日期 void show 判斷是否為閏...