【C++基礎 07】運算子多載,運算子多載
1.什麼是運算子多載?
顧名思義,比如重載運算子 + - * / 等,改變這些符號原有的意義。
C++提供了operator關鍵字,它和運算子一起使用,表示一個運算子函數,理解時應將operator=整體上視為一個函數名。
2.兩種實現
運算子的重載實現有兩種形式:
(1)重載為類的成員函數
<函數傳回型別> operator <運算子>(<形參表>){<函數體>;}
(2)重載為類的友元函數
friend <函數傳回型別> operator <運算子>(<形參表>){<函數體>;}
3.樣本
(1)重載為類的成員函數
class Test { public: Test(void):a(0){}; ~Test(void){}; Test(int _a):a(_a){}; Test& operator + (Test& _test)//重載操作符,返回該類的一個執行個體 { int new_a=a+_test.a; Test new_Test(new_a); return new_Test; }; int a; }; void main() { Test t1(1),t2(2),t3; t3=t1+t2; std::cout<<t3.a; return ; } (2)重載為類的友元函數
class Test { public: Test(void):a(0){}; ~Test(void){}; Test(int _a):a(_a){}; friend Test& operator + (Test& _test1,Test& _test2)//重載為友元函數,因為友元函數不是類成員,所以需要傳入2個參數 { int new_a=_test1.a+_test2.a; Test new_Test(new_a); return new_Test; }; int a; };void main() { Test t1(1),t2(2),t3; t3=t1+t2; std::cout<<t3.a; return ; }
需要注意的是重載運算子的時候,返回最好是引用Test&而不是Test,原因如下:
(1)返回引用的話就是返回本身,返回值就是返回副本(相當於多調用一次copy建構函式,效率變慢)
(2)在連續操作時,會出現問題,比如說 (a = b) = c ,a = b 返回的是一個臨時對象(副本),(a = b) = c 之後c就賦值不到a上了
c語言 運算子多載
c++
class A {
public:
int i, j;
class A & operator + ( class A a1, class A a2 )
{ i = a1.i + a2.i; j = a1.j + a2.j; return * this }
class A & operator - ( class A a1, class A a2 )
{ i = a1.i - a2.i; j = a2.j - a2.j; return * this }
}
C/C++運算子多載
this 值是類的隱性指標,什麼意思? 就是說我們定義類的使用都不會寫this這個指標,但是自動產生這樣一個指標,它指向的是對象本身
所以*this就是對該指標解引用,就相當於類的對象本身
如果Clock a;
*this 其實跟a的意思是差不多的
&是引用的意思,這種形式返回的是類的對象本身,不會建立臨時變數
而且可以作為左值
做左值的意思是放在=號的左邊,用其他值賦值給它