C 中類的建構函式的隱式初始化和顯示初始化怎麼理解

2022-03-05 01:28:03 字數 1688 閱讀 3905

1樓:匿名使用者

隱式初始化可以理解為自己不做任何的操作,有系統環境幫你完成變數的初始化。

顯示的就是自己的操作了啊。

2樓:張城落

隱式初始化,即在main()函式中,沒有顯式呼叫建構函式的語句。建構函式是在定義物件時被系統自動呼叫。如:

類名 物件名【實參表】;

那麼顯式初始化應該是先宣告物件,再呼叫建構函式;

即類名 物件名;

物件名 . 建構函式【實參表】;

抱歉,我試過了,上面那種顯示呼叫是錯誤的;資料上說建構函式不需使用者呼叫,自動執行。

3樓:倒黴熊

可以看一下下面的這個例子:

有一個類的建構函式為: a(int i) : m_i(i){}

顯示初始化的:

a abc(200);//顯式初始化,直接呼叫建構函式

a a = a(1);//直接呼叫建構函式,沒有臨時物件,作用域結束時析構

a* e = new a(2);//直接呼叫建構函式,使用delete時析構

a d(*e);//顯式初始化,呼叫拷貝建構函式,作用域結束時析構

隱式初始化的

a c = 0;//這是一種隱式初始化,直接呼叫建構函式,沒有臨時物件。不要看到=號就以為要用拷貝建構函式。

a b = a;//用一個物件隱式初始化另一物件,呼叫拷貝建構函式,作用域結束時析構

顯示初始化的就是 你直接呼叫建構函式或拷貝建構函式,函式寫什麼樣,你就怎麼樣呼叫。

而隱式的 就是 不是函式呼叫的方式,但是後面操作的依然是建構函式或拷貝建構函式,只是看起來不明顯而已

c++中引用型別資料成員為什麼不能在建構函式中賦值,而只能在成員初始化表中進行?

4樓:匿名使用者

建構函式可以分為兩個階段執行:(1)初始化階段;(2)普通的計算階段(即可以是那些賦值語句之類的。)

不管成員是否在建構函式初始化列表中顯示初始化,類型別的成員總是在初始化階段初始化。

比如這樣一個class:

class a ;

在執行建構函式a(int ii)時都要先初始化,再能執行建構函式體內的賦值。

那麼ci和ri如果不在初始化列表裡初始化,是不能執行完初始化操作的。也就是說,初始化const或者引用型別資料成員的唯一機會就是在建構函式初始化列表中。

所以上述建構函式可以寫為 a::a(int ii) : ci(ii), ri(ii)

補充一點:內建型別的成員不進行隱式初始化,所以上述成員i不需要在初始化階段初始化,當然也可以初始化,只是不管是在初始化列表中初始化還是在函式體內賦值,其效率是一樣的。即

a::a(int ii) : ci(ii), ri(ii) 與a::

a(int ii) : i(ii), ci(ii), ri(ii) {} 效率相同。都正確。

5樓:匿名使用者

首先,你得分清什麼是初始化,什麼是賦值!

c++類中的類成員變數怎麼呼叫帶引數的建構函式來初始化?

c++中類中的結構體資料成員怎麼用建構函式初始化

6樓:匿名使用者

結構體本身就是一個class只不過所有成員的預設訪問級別為public。它定義建構函式和普通class一樣的

建構函式是用來初始化所定義的物件,如果類中沒有定義任何建構函式,則該類的對

不對,c 裡不寫類的建構函式時,編譯器會為類建立一個預設的建構函式,雖然這個函式什麼都不做,但是類的物件還是會在此時初始化,不過,物件成員的值是隨機的,比如,指標型成員變數可能為null,也有可能不為null。no如果使用者不提供建構函式,那麼編譯器就會自動合成一個預設建構函式 除非自定義一個私有的...

4 請問,在C 類中如何初始化const和static資料成員

const資料成員只能在成員初始化列表進行初始化,static資料成員只能在類外進行初始化。static const資料成員既可以在宣告時初始化,也可以在類外初始化。下面是一個例子 include using namespace std class a public a ci 1 void outp...

關於C語言裡的初始化問題為什麼要初始化

區域性變數初始化 是指在使用這個區域性變數前,要對其進行初始化。這是因為區域性變數是從記憶體堆中分配的,用完就還給記憶體堆,所以被分配的區域性變數並不一定是0,而很可能是其他地方用過的一個值,因此在使用這個變數之前,要對它進行顯示初始化。c的區域性變數一般是在棧上進行分配的。棧使用的是ram,掉電內...