賦值操作符概要

2021-06-22 08:21:40 字數 1416 閱讀 3555

乙個類預設有乙個賦值函式,類似這樣的:

classtype& operator = (const classtype&);

這個賦值函式也就是乙個簡單的= 操作符的過載形式,當你要將乙個物件賦值給另乙個物件時呼叫

有關賦值函式,有以下概要問題:

(以string類為例)

class string

;

1.錯誤的定義形式

string& operator = (const string& s)

因為沒有處理自己本身賦值給自己的情況,在這種情況下,this 和 s 指向同一物件,程式執行會down掉。

2,正確的定義形式

string& operator = (const string& s)

return *this;

}

在這裡只要加上if判斷是否是自己賦值給自己就ok了,如果是自己賦值給自己,就簡單的返回this.

3,正確的定義形式

string& operator = (const string& s)

這個方法就是利用中間變數將舊的目標值儲存起來,知道賦值操作完成為止。

如果你的程式沒有必要用到這個賦值函式,直接將其宣告為私有即可

private:

string& operator = (const string &);

也可以利用乙個巨集搞定:

#define disallow_assign(type) private: \

type& operator = (const type&);

class string

public :

//some functions

disallow_assign(string);

賦值操作符

與類要控制初始化物件的方式一樣,類也定義了該型別物件賦值時會發生什麼 sales item trans,accum trans accum 與複製建構函式一樣,如果類沒有定義自己的賦值操作符,則編譯器會合成乙個。過載操作符是一些函式,其名字為 operator 後跟著所定義的操作符的符號。因此,通過...

賦值操作符

預設的賦值操作符用於處理同類物件之間的賦值,不要與複製建構函式混淆.如果是建立新的物件,則呼叫複製 拷貝 建構函式,如果是修改已有物件的值,則呼叫賦值操作符 myclass aclass myclass bclass aclass 呼叫複製建構函式 myclass cclass cclass acl...

c語言操作符概要

算術操作符 在c語言中有兩個單目和五個雙目運算子。符號 功能 單目正 單目負 乘法 除法 取模 加法 減法 下面是一些賦值語句的例子,在賦值運算子右側的表示式中就使用了上面的算術運算子 area height width num num1 num2 num3 num4 運算子也有個運算順序問題,先算...