概述:
運算子過載,就是對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別。運算子過載(operator overloading)只是一種」語法上的方便」,也就是它只是另一種函式呼叫
的方式,只是為了方便我們使用,運算子只能運算內建的資料型別,對於自定義的資料型別不能運算,所以我們可以過載運算子。
運算子過載的基本概念:
在 c++中,可以定義乙個處理類的新運算子。這種定義很像乙個普通的函式定義, 只是函式的名字由關鍵字operator
及其緊跟的運算子組成。差別僅此而已。它像任何其他函式一樣也是乙個函式,當編譯器遇到適當的模式時,就會呼叫這個函式。
語法: 定義過載的運算子就像定義函式,只是該函式的名字是 operator@,這裡的@代表了被過載的運算子。
比如用****實現了乙個簡單類的成員相加
1,呼叫函式實現類成員相加:
#include
using
namespace std;
class
person
int age;
person my_add ( person &p2)};
/*person my_add (person &p1, person &p2)/*也可以使用全域性函式實現*/*/
void
test01()
intmain()
2,使用過載運算子實現自定義變數的相加
#include
using
namespace std;
class
person
int age;
person operator
+( person &p2)};
/*person operator+ (person &p1, person &p2)
*/void
test01()
intmain()
結果如下:
注:過載加號運算子的時候,全域性和類成員只能存在乙個,否則會報錯,如果有兩個operator+
函式編譯器就不知道去呼叫哪個了。
運算子過載遇到友元
過載cout
左移運算子**如下
#include
#include
using
namespace std;
class
person
private
:int age;};
ostream&
operator
<<
(ostream &cout , person& p1)
void
test01()
intmain()
上面可以看出,如果是全域性函式過載,需要傳兩個引數,正常來說,如果是類內函式過載是需要cout.operator<< (person &p)
但是我們不方便去修改cout類的成員,所以我們只能使用全域性函式過載。
注:如果過載運算子函式想要去訪問私有許可權變數的時候,可以使用友元概念來實現,只需要宣告過載運算子函式是類的友元就可以了。
可以過載的運算子:
運算子過載 賦值運算子的過載
有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...
C 運算子過載 過載特殊運算子
賦值運算子用於同類物件間的相互賦值。賦值運算子只能被過載為類的非靜態成員函式,不能過載為友元函式和普通函式。對於使用者自定義的類而言,如果沒有過載賦值運算子,那麼c 編譯器會為該類提供乙個預設的過載賦值運算子成員函式。預設賦值運算子的工作方式是按位對拷,將等到右邊物件的非靜態成員拷貝給等號左邊的物件...
運算子過載 類的賦值運算子過載
下面介紹類的賦值運算子 1.c 中物件的記憶體分配方式 在c 中,物件的例項在編譯的時候,就需要為其分配記憶體大小,因此,系統都是在stack上為其分配記憶體的。這一點和c 完全不同!千 萬記住 在c 中,所有類都是reference type,要建立類的實體,必須通過new在heap上為其分配空間...