C 基礎學習筆記05 運算子過載

2021-10-04 01:27:38 字數 2162 閱讀 5282

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

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...