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; } 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クラス演算子リロード事例
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;
};