學習 類和物件 運算子過載

2022-03-14 00:46:17 字數 2585 閱讀 6703

什麼是運算子過載?

運算子過載概念:對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別

對於個人而言,學到這裡的感受就是,多了一種能夠自定義方式來進行運算的方式吧,通過類似語法糖的效果operator+來自動實現相應的操作

+號運算子過載:

作用:實現兩個自定義資料型別相加的運算

在+號運算子過載裡面,我們可以通過兩種方式來定義,一種是成員函式來實現,還有一種全域性函式來實現

同樣的呼叫方法也有兩種,以下**有體現

示例**:

#include#includeusing namespace std;

class person

public:

int age;

};//全域性函式 實現+號運算子過載

person operator+(person& p1, int val)

int main()

總結1:對於內建的資料型別的表示式的的運算子是不可能改變的

總結2:不要濫用運算子過載

左移運算子過載

通過左移運算子過載,我們可以實現輸出自定義資料型別,比如cout << 物件 << endl,實際輸出的是cout << 物件.a << endl

#include#includeusing namespace std;

class person

//void operator<<(cout) {} //在類中定義的話無法實現 cout << p這種形式到時候呼叫的時候只能是p.operator<<(p),簡化版只能是 p << cout,所以我們只在全域性區定義函式

private:

int a;

int b;

};ostream& operator<<(ostream& cout,person& p)

int main()

num & operator--()

num operator--(int)

private:

int a;

};//過載乙個左移運算子

ostream & operator<<(ostream& cout, num n)

int main()

賦值運算子過載:

c++編譯器至少給乙個類新增4個函式

1、預設建構函式(無參,函式體為空)

2、預設析構函式(無參,函式體為空)

3、預設拷貝建構函式,對屬性進行值拷貝

4、賦值運算子operator=, 對屬性進行值拷貝

如果類中有屬性指向堆區,做賦值操作時也會出現深淺拷貝問題

#include#includeusing namespace std;

class person

person & operator=(person & p)

this->height = new int(*p.height);

return *this;

} ~person()

}public:

int * height;

};int main()

關係運算子過載:

作用:過載關係運算子,可以讓兩個自定義型別物件進行對比操作

還是一樣的,就是返回個型別應該來說是個布林值,因為是==比較

#include#includeusing namespace std;

class person

bool operator==(person& p)

else

} bool operator!=(person& p)

else

}public:

string name;

int age;

};int main() else

system("pause");

return 0;

}

函式呼叫運算子過載:

1、函式呼叫運算子 () 也可以過載

2、由於過載後使用的方式非常像函式的呼叫,因此稱為仿函式,仿函式沒有固定寫法,非常靈活

自己總結下這個知識點:

1、第一點是函式呼叫運算子過載,也就是跟之前的一樣加個()就好了

2、第二點是匿名物件類,也可以我們後面不需要再繼續用到,所以就不需要進行儲存操作,一次性呼叫就可以了

體現**:

#include#includeusing namespace std;

class printer

};int main()

類和物件 運算子過載 3 遞增運算子過載

作用 通過過載遞增運算子,實現自己的整型資料 include include using namespace std 自定義整型 class myinteger 過載前置 運算子 myinteger operator 返回引用為了一直對乙個資料進行遞增操作 過載後置 運算子 myinteger op...

C 類和物件 運算子的過載

運算子過載概念 對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別 4.5.1 加號運算子過載 作用 實現兩個自定義資料型別相加的運算 include using namespace std 加號運算子過載 class person int m a int m b 函式的宣告 per...

物件 運算子過載

函式解決運算 運算子過載 過載單目運算子 兩個物件的相加的實現 1 函式解決運算 includeusing namespace std 注意事項 1 不允許使用者自定義新的運算子,只能對已有的運算子進行過載 2 不能改變原有的運算子運算元的個數 3 不能改變原有運算子的等級 4 不能改變原有運算子的...