c 關於拷貝建構函式和等號的過載

2021-03-11 09:33:54 字數 2959 閱讀 9356

1樓:成都癲癇匯康

複製建構函式接受

bai單du

個類型別引用形參,這個形zhi參一般用const修飾。

class a

;一般的類,編譯器dao合成內

的建構函式就能完成必要的工作。擔當類有一個資料成員是指標,或者成員表示在建構函式中分配的其他資源;在建立新物件時必須做一些特定工作。這兩種情況必須定義複製建構函式。

複製操作符過載,由operator後面跟所定義的操作符符號,通過定義名為operator=函式來對賦值進行定義。該操作符函式有兩個形參:第一個形參對應左邊的運算元(隱式繫結到this指標了),第二個形參對應右運算元。

返回型別應該與內建賦值運算返回的型別相同,內建型別的賦值運算返回對右運算元的引用,賦值操作符也返回對同一型別的引用。

class b

;可以使用合成複製建構函式的類通常也可以使用合成賦值操作符。一容般來說,如果類需要複製建構函式,也就需要賦值操作符。

2樓:巫馬尓絲

一個類的建構函式只有在定義該類的物件時候才會呼叫,而且每個物件只有一次呼叫構造函版數的機會,權myclass obj3 = obj1,這個是在定義物件時候的賦值,所以呼叫的是copy建構函式。

myclass obj3 = obj1 等價於myclass obj3(obj1),這個判斷應該是正確的。

myclass obj3;

obj3 = obj1;這樣就不是屬於建構函式了。

你的建構函式只發生在定義一個物件的時候,定義完了以後再賦值,就是=號過載了。

c++複製建構函式和=號過載問題

3樓:幻夢·人生

表述基本上沒有問bai題。從功能上來du說,建構函式是用於建立zhi物件的dao,operator其實是可以看成普通內的成員函式,只不容

過是以符號的形式代替文字,看上去更加直觀。

所以在建構函式中,需要對成員變數進行初始化,包括建立所需的空間等等。而operator呼叫時,物件已經建立完畢,不需要繼續進行空間的建立。

4樓:我喜歡看火影

如果物件在宣告的同時將另一個已存在的物件賦給它,就會呼叫複製建構函式;如果物件已經存在,然後將另一個已存在的物件賦給它,呼叫的就是賦值運算子(過載)

5樓:匿名使用者

嗯,是這個意思,沒來

有複製構自造之前,你的storedvalue沒有初始化,bai存的du是隨機地址,所以這時zhi使用*storedvalue = *rhs.storedvalue;去改變那個隨dao機地址裡的值是很危險的。

6樓:匿名使用者

你都想通了還問什麼。。

c++中拷貝建構函式和賦值運算子過載本質上一樣麼

7樓:匿名使用者

本質不一樣,語法上也不一樣

他們的區別:

拷貝建構函式是在一堆原始的記憶體上建立起一個物件。

複製運算子過載是在已初始化的物件上進行復制。

8樓:千鋒教育

複製構造函

數接受單個類型別引用形參,這個形參一般用const修飾。

class a

;一般的類,編專譯器合成的建構函式就能完成屬必要的工作。擔當類有一個資料成員是指標,或者成員表示在建構函式中分配的其他資源;在建立新物件時必須做一些特定工作。這兩種情況必須定義複製建構函式。

複製操作符過載,由operator後面跟所定義的操作符符號,通過定義名為operator=函式來對賦值進行定義。該操作符函式有兩個形參:第一個形參對應左邊的運算元(隱式繫結到this指標了),第二個形參對應右運算元。

返回型別應該與內建賦值運算返回的型別相同,內建型別的賦值運算返回對右運算元的引用,賦值操作符也返回對同一型別的引用。

class b

;可以使用合成複製建構函式的類通常也可以使用合成賦值操作符。一般來說,如果類需要複製建構函式,也就需要賦值操作符。

9樓:匿名使用者

假設你有一個類a,和一個已有的類物件b時

當你執行a a=b來建立物件a時呼叫的是拷貝建構函式,當你執行a a;a=b時呼叫的是運算子過載就功能而言,感覺差別不大

10樓:葉片舟

形式上不一樣,本質一樣

都是為了防止,淺拷貝帶來的錯誤

用的時機不懂

既然是建構函式,所以就是在初始化使用的, 過載賦值操作符就是賦值時用的

能不能幫忙寫一下c++類的建構函式,拷貝建構函式,賦值運算子=號的操作符過載,解構函式?求教!

11樓:愛夜

class test

;test::test(void)

test::test(test& item) //拷貝this->data = new char[itemlen];

p = this->data;

q = item.data;

while( itemlen-- &&(*p++ = *q++));

return;

}void test::operator=(test& item)this->len = item.len;

if( this->len == 0 )

this->data = new char[itemlen];

p = this->data;

q = item.data;

while( itemlen-- &&(*p++ = *q++));

return;

}test::~test()

}test::test(char * item,int n)this->data = new char[n];

p = this->data;

q = item;

while( len-- &&(*p++ = *q++));

return;}

c 中拷貝建構函式和賦值運算子過載本質上一樣麼

本質不一樣,語法上也不一樣 他們的區別 拷貝建構函式是在一堆原始的記憶體上建立起一個物件。複製運算子過載是在已初始化的物件上進行復制。複製構造函 數接受單個類型別引用形參,這個形參一般用const修飾。class a 一般的類,編專譯器合成的建構函式就能完成屬必要的工作。擔當類有一個資料成員是指標,...

c 拷貝建構函式問題

從c 的角度說,引用就是個物件別名,當外部物件 實參 傳入函式時,為物件取了個別名 形參 沒有做記憶體分配工作,因而也沒做物件複製工作,所以引用呼叫函式效率最高。而實質上引用其實傳入的是地址 注意別和傳遞指標變數混淆 只是在函式體內將該地址按物件來操作,把他看做函式內定義的一個物件。請參考 incl...

用c編寫類string的建構函式拷貝建構函式析

你看看bai這du 個,裡zhi面dao 好像就回有答 能不能幫忙寫一下c 類的建構函式,拷貝建構函式,賦值運算子 號的操作符過載,解構函式?求教 class test test test void test test test item 拷貝this data new char itemlen p...