預設成員函式的應用場景:
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 判斷是否為閏...