運算子過載:對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別。
1.1 加號運算子過載
通過成員函式過載加號運算子:
class
person
person
(int a,
int b)
:m_a
(a),
m_b(b)
person operator
+(person &p)};
intmain()
```通過全域性函式過載加號運算子:
```cpp
person operator
+(person &p1,person &p2)
1.2 左移運算子過載
作用:輸出自定義型別資料
只能全域性函式過載左移運算子
class
person
person
(int a,
int b)
:m_a
(a),
m_b(b)};
ostream &
operator
<<
(ostream &cout,person p)
intmain()
cout是ostream型別;為了讓輸出p後可以繼續輸出其他內容,全域性函式中的返回需要用ostream
1.3 遞增運算子過載
作用:通過過載遞增運算子,實現自己的整型資料
class
myinteger
//過載前置++運算子
myinteger &
operator++(
)//過載後置++運算子
myinteger operator++(
int)
private
:int m_num;};
ostream &
operator
<<
(ostream &cout,myinteger myint)
intmain()
1.4 賦值運算子過載
由於編譯器的賦值運算子是淺拷貝操作,現在假設建立乙個person類,並且將屬性開闢在堆區
class
person
~person()
}private
:int
*m_age;
};
在堆區開闢的記憶體空間需要由程式設計師手動釋放,當執行下面**時,程式會崩潰
person p1(18
);person p2(20
);p2=p1;
因為將p1的值賦值給p2,進行的是淺拷貝操作,p1與p2的指標指向堆區同一片記憶體,當執行析構函式時,相當於將這塊記憶體釋放了兩次,造成程式崩潰
下面過載賦值運算子,需要自己再開闢一塊記憶體空間:
class
person
~person()
} person &
operator
=(person &p)
m_age=
newint
(*p.m_age)
;return
*this;}
private
:int
*m_age;
};
1.5 關係運算子過載
作用:過載關係運算子,可以讓兩個自定義型別物件進行對比操作
類內定義:
class
person
bool
operator
==(person &p)
else
} string m_name;
int m_age;
};
類外定義:
bool
operator
==(person &p1,person p2)
else
}
C 基礎學習(05) 運算子
運算子是一種告訴編譯器執行特定的數學或邏輯操作的符號。c 內建了豐富的運算子,並提供了以下型別的運算子 運算子描述 把兩個運算元相加 從第乙個運算元中減去第二個運算元 把兩個運算元相乘 分子除以分母 取模運算子,整除後的餘數 自增運算子,整數值增加 1 自減運算子,整數值減少 1 運算子描述 檢查兩...
c 學習筆記 運算子過載
今天在看使用ceres擬合函式 的時候看到了運算子過載,由於c 當時沒學好現在也忘得差不多了,所以打算開始做乙個c 的學習筆記,看到哪寫到哪。今天看到的這段 如下 template bool operator const t const abc,t residual const 操作符過載的格式是 ...
C 學習筆記 運算子過載
自定義類可以過載運算子,大多數的運算子都是可以過載的,下表給出了那些運算子可以過載那些不可以過載。對於運算子的過載,我們需要明白運算子是如何呼叫的。非成員函式的運算子呼叫 d1 d2 表示式方式呼叫 operator d1,d2 等價的呼叫 成員函式的運算子呼叫方式 d1 d2 運算子呼叫 d1.o...