C++代入演算子リロード

2269 ワード

代入演算子の再ロード
C++はコードの可読性を高めるために演算子リロードを導入し,演算子リロードは特殊な関数名を持つ関数であり,その戻り値タイプ,関数名およびパラメータリストもあり,その戻り値タイプはパラメータリストと通常の関数と類似している.
関数名は、キーワードoperatorの後ろに、リロードする演算子記号が接続されます.組み込み型のオペレータでは、その意味は変更できません.たとえば、組み込み型+、その意味は変更できません.注意:.*、:、sizeof 、?: 、. 以上の5つの演算子は再ロードできません.これはよく筆記試験の選択問題に出ます.
関数プロトタイプ:戻り値タイプ+operator+オペレータ+(パラメータリスト)
例:
//グローバルなoperator==class Date{public:Date(int year=1900、int month=1、int day=1){_year=year;_month=month;_day=day;//private: int _year; int _month; int _day; };//ここでは、演算子をグローバルに再ロードするにはメンバー変数が共有される必要があることがわかります.では、問題が発生しました.パッケージ性はどのように保証されますか?//ここでは、後で学習した友元で解決したり、いっそメンバー関数に再ロードしたりすることができます.bool operator==(const Date& d1, const Date& d2) { return d1._year == d2._year; && d1._month == d2._month && d1._day == d2._day; } void Test () { Date d1(2018, 9, 26); Date d2(2018, 9, 27); cout< }
演算子のリロード例:
class Date {
public:
	//        
	Date(int year = 1900, int month = 1, int day = 1) {
		_year = year;
		_month = month;
		_day = day;
	}

	void PrintDate() {
		cout << _year << "-" << _month << "-" << _day << endl;
	}

	Date& operator++() {   //     
		_day += 1;
		return *this;
	}

private:
	int _year;
	int _month;
	int _day;
};

int main() {
	int a = 10;
	a++;

	Date d1(2019, 8, 1);
	Date d2(2019, 8, 1);
	d2 = d1++;

	system("pause");
	return 0;
}

代入演算子の再ロード:
class Date { public : Date(int year = 1900, int month = 1, int day = 1) { _year = year; _month = month; _day = day; } Date (const Date& d) { _year = d._year; _month = d._month; _day = d._day; } Date& operator=(const Date& d) { if(this != &d) { _year = d._year; _month = d._month; _day = d._day; } } private: int _year ; int _month ; int _day ; };
Dateクラス演算子リロード事例
//   Date 
class Date {
public:
	Date(int year = 1900, int month = 1, int day = 1);  //       
	Date(const Date& d);   //    

	Date& operator=(const Date& d);   //        
	Date operator+(int days);

	int operator+(const Date& d);

	Date& operator++();   //  ++            
	Date operator++(int);   //  ++
	Date& operator--();
	Date operator--(int);

	bool operator>(const Date& d)const;
};