C 運算子過載

2021-07-08 10:53:36 字數 3039 閱讀 2027

包括:++運算子、+運算子、賦值運算子=、轉換運算子、int() char*()運算子、==運算子。

1.過載++運算子

class testsample

; ~testsample()

; void setnum(int inum)

int getnum() const

const testsample& operator ++ ()//字首

const testsample& operator ++ (int)//字尾 注意: int根本沒有使用,只是區分字首字尾

private:

int num = 5; };

int _tmain(int argc, _tchar* argv)

輸出:

test******one:5

test******one:7

test******two:6

test******one:8

test******two:8

請按任意鍵繼續. . .

2.過載+運算子

class testsample

; testsample()

; ~testsample()

; void setnum(int inum)

int getnum() const

const testsample& operator + (const testsample& obj)

private:

int num = 0; };

int _tmain(int argc, _tchar* argv)

輸出:

samplethree = sampleone + sampletwo:40

請按任意鍵繼續. . .

3.過載=運算子

c++提供預設的建構函式、析構函式和拷貝建構函式,還有第四個由編譯器提供的成員函式:賦值運算子(=)

testsample sampleone(23), sampletwo(17);

sampleone = sampletwo;

cout << "sampleone:" << sampleone.getnum() << endl;

預設的賦值運算子將sampletwo賦值給sampleone,sampleone的num也由23變為17了。

大部分情況下預設的賦值運算子能夠對付,與預設拷貝建構函式一樣(淺複製,深複製區別),當類中有堆記憶體成員變數時,導致兩個物件指向同乙個記憶體區域,釋放記憶體時會出錯,預設函式會造成錯誤。

class testsample

; ~testsample()

};void setstr(char* istr)

char* getstring() const

const testsample& operator = (const testsample& obj)

pstr = new char[200];//重新分配記憶體

strncpy_s(pstr, 200, obj.pstr, strlen(obj.pstr));

return *this; }

private:

char* pstr = nullptr; };

int _tmain(int argc, _tchar* argv)

輸出:

sampletwo:sampleone!

請按任意鍵繼續. . .

4.轉換運算子

如何將乙個內建型別值賦值給使用者自定義的類物件?比如:將int賦值給類物件。

下面就實踐轉換運算子,它是乙個建構函式的過載版本。

class testsample

; testsample(int newvalue)//轉換運算子,它是乙個建構函式的過載版本

; ~testsample()

; void setnum(int num)

int getnum()

private:

int num = 0;

};int _tmain(int argc, _tchar* argv)

; ~testsample()

; operator unsigned int()//int()運算子

operator char*()//char*()運算子

void setnum(int num)

int getnum()

private:

int num = 0;

char* pstr = "123afg";

};int _tmain(int argc, _tchar* argv)

輸出:

int alpha:15

char* beta:123afg

請按任意鍵繼續. . .

6.過載==運算子

如何比較兩個物件是否相等?

class testsample

; testsample(int num)

; ~testsample()

; bool operator == (const testsample& obj)

void setnum(int num)

int getnum() const

private:

int num = 0;

};int _tmain(int argc, _tchar* argv)

輸出:

sampletwo is equal to sampleone!

sampletwo is not equal to sampleone!

請按任意鍵繼續. . .

C 運算子過載 過載特殊運算子

賦值運算子用於同類物件間的相互賦值。賦值運算子只能被過載為類的非靜態成員函式,不能過載為友元函式和普通函式。對於使用者自定義的類而言,如果沒有過載賦值運算子,那麼c 編譯器會為該類提供乙個預設的過載賦值運算子成員函式。預設賦值運算子的工作方式是按位對拷,將等到右邊物件的非靜態成員拷貝給等號左邊的物件...

C 運算子過載賦值運算子

自定義類的賦值運算子過載函式的作用與內建賦值運算子的作用類似,但是要要注意的是,它與拷貝建構函式與析構函式一樣,要注意深拷貝淺拷貝的問題,在沒有深拷貝淺拷貝的情況下,如果沒有指定預設的賦值運算子過載函式,那麼系統將會自動提供乙個賦值運算子過載函式。賦值運算子過載函式的定義與其它運算子過載函式的定義是...

C 運算子過載轉換運算子

為什麼需要轉換運算子?大家知道對於內建型別的資料我們可以通過強制轉換符的使用來轉換資料,例如 int 2.1f 自定義類也是型別,那麼自定義類的物件在很多情況下也需要支援此操作,c 提供了轉換運算子過載函式 它使得自定義類物件的強轉換成為可能。轉換運算子的生命方式比較特別,方法如下 operator...