請問建構函式與拷貝建構函式的相同點有哪些?不同點有哪些

2022-04-11 21:00:48 字數 2238 閱讀 2475

1樓:鍢塋jj鈾傗櫏

建構函式是一種特殊的類成員函式,是當建立一個類的物件時,它被呼叫來對類的資料成員進行初始化和分配記憶體。(建構函式的命名必須和類名完全相同)

拷貝建構函式是c++獨有的,它是一種特殊的建構函式,用基於同一類的一個物件構造和初始化另一個物件。

當沒有過載拷貝建構函式時,通過預設拷貝建構函式來建立一個物件

在c++中,3種物件需要複製,此時拷貝建構函式會被呼叫

1)一個物件以值傳遞的方式傳入函式體

2)一個物件以值傳遞的方式從函式返回

3)一個物件需要通過另一個物件進行初始化

什麼時候編譯器會生成預設的拷貝建構函式:

1)如果使用者沒有自定義拷貝建構函式,並且在**中使用到了拷貝建構函式,編譯器就會生成預設的拷貝建構函式。但如果使用者定義了拷貝建構函式,編譯器就不在生成。

2)如果使用者定義了一個建構函式,但不是拷貝建構函式,而此時**中又用到了拷貝建構函式,那編譯器也會生成預設的拷貝建構函式。

2樓:七擒關羽

建構函式:與類同名,沒有返回值,物件被初始化時自動呼叫,初始化成員。

拷貝建構函式:與類同名,沒有返回值,有一個該類物件的引用作為參量,實現物件之間的初始化,需要顯性呼叫。

3樓:cloud季眠

你利用科學問題來回答

拷貝建構函式與普通建構函式有什麼相同點與不同點?它適用於什麼場合

4樓:善護

當用一個已初始化過了的自定義類型別物件去初始化另一個新構造的物件的時候,拷貝建構函式就會被自動呼叫。也就是說,當類的物件需要拷貝時,拷貝建構函式將會被呼叫。以下情況都會呼叫拷貝建構函式:

一個物件以值傳遞的方式傳入函式體

一個物件以值傳遞的方式從函式返回

一個物件需要通過另外一個物件進行初始化。

如果在類中沒有顯式地宣告一個拷貝建構函式,那麼,編譯器將會自動生成一個預設的拷貝建構函式,該建構函式完成物件之間的位拷貝(淺拷貝)。

在某些狀況下,類內成員變數需要動態開闢堆記憶體,如果實行位拷貝,也就是把物件裡的值完全複製給另一個物件,如a=b。這時,如果b中有一個成員變數指標已經申請了記憶體,那a中的那個成員變數也指向同一塊記憶體。這就出現了問題:

當b把記憶體釋放了(如:析構),這時a內的指標就是野指標了,出現執行錯誤。

拷貝建構函式和賦值運算子有哪些不同點和相

5樓:風若遠去何人留

拷貝構造,是一個的物件來初始化一邊記憶體區域,這邊記憶體區域就是你的新物件的記憶體區域賦值運算,對於一個已經被初始化的物件來進行operator=操作

class a;

a a;

a b=a; //拷貝建構函式呼叫

//或a b(a); //拷貝建構函式呼叫

///////////////////////////////////

a a;

a b;

b =a; //賦值運算子呼叫

你只需要記住,在c++語言裡,

string s2(s1);

string s3 = s1;

只是語法形式的不同,意義是一樣的,都是定義加初始化,都呼叫拷貝建構函式。

一般來說是在資料成員包含指標物件的時候,應付兩種不同的處理需求的 :

一種是複製指標物件,

一種是引用指標物件 copy大多數情況下是複製,=則是引用物件的

即 深拷貝 和 淺拷貝

拷貝建構函式 是深拷貝

例子:class a

顯然a a, b;

a=b的時候,對於pdata資料存在兩種需求

第一種copy

a.pdata = new char [nlen];

memcpy(a.pdata, b.pdata, nlen);

另外一種(引用方式):

a.pdata = b.pdata

通過對比就可以看到,他們是不同的

往往把第一種用copy使用,第二種用=實現

建構函式 解構函式有什麼相同點和不同點

6樓:維護健康

建構函式是一個特殊的成員函式,能夠自動初始化物件。

解構函式是在一個銷燬物件時自動呼叫的成員函式。

通俗地講,建構函式就是在物件剛誕生時執行的函式,解構函式則是在物件將被破壞(消亡)前執行的函式。

c裡建構函式怎麼寫,C 建構函式的引數是陣列的話要怎麼寫

public class myclass public myclass int age 這是一個帶引數的建構函式 private int age 建構函式的作用 簡單地說就是初始化一類的物件例項以及其各自段的值.c 建構函式是在建立給定型別的物件時執行的類方法。建構函式具有與類相同的名稱,它通常初始...

c 什麼是虛擬函式,構造與解構函式可以是虛擬函式嗎

虛擬函式用於實現類的繼承所體現的多型性,當一個類的成員函式被宣告為虛的,那麼這個類的派生類如果過載了這個函式,那麼在呼叫這個函式時,會先確認這個類例項是原來的類還是派生類 因為父類的指標可以指向子類 如果是父類,那麼呼叫父類的版本,如果是子類,則呼叫對應的子類的版本。class a class b ...

描述建構函式如何在繼承中使用,關於C 中建構函式的繼承的問題。

繼承技術是物件導向程式設計的主要特徵。物件導向程式語言引入繼承機制,可以實現 重用,提高程式設計效率。c 只支援單繼承,即一個派生類只能有一個基類。類的繼承性是指一個類定義既可以具有其他類的資料成員 屬性成員 方法成員等,也可以使其他類具有自己的資料成員 屬性成員 方法成員等。在類的繼承中,被繼承的...