c 初始化類,c 中兩種初始化的區別和原因

2025-01-04 13:05:06 字數 4071 閱讀 6774

1樓:靈_火

首先,指出乙個小小的錯誤:不能用class定義陣列變數,因為它是個關鍵字,呵呵!

應該宣告為:

myclass* cl[9];或者其他什麼的。

其次,要說明一下,myclass* class[9];這條語句是宣告瞭乙個myclass指標型別的陣列。

只宣告的指標,但沒有給指標賦值,指標指向的是不可知的錯誤的位址。所以,你的這個指標陣列是不可用的。

必須給指標賦值,才能用。

在這裡,我提供乙個初始化class[9]的例子,這是動態建立記憶體的例子,給你參考一下。

for(int i=0;i!=9;i++)

class[i]=new myclass(i,i+1);

還有一種,就是建立乙個myclass,然後給指標陣列賦位址。

myclass mc(1,2);

class[0]=&mc;

不過可能你問的是關於建構函式的東西,呵呵!

你myclass物件都沒有建立,怎麼能呼叫set函式啊。

2樓:御風__弄影

這個錯誤很容易發現的,你應該是想把類的陣列初始化。你只需要將myclass* class[9];的「*」去掉就行了。加上「*」定義的就是指標陣列了。

當然,如果你想用指標陣列,那麼class[i]->set(a, d); 你不能直接就用了,因為你的指標沒有動態分配空間。

可以這樣弄:

for(int i=0;i<9;i++)

class[i]=new myclass;

class[i]->set(a,d);

3樓:網友

就是9個myclass物件,每乙個都用自己的建構函式初始化。用陣列,記憶體可以連續分配。

4樓:網友

陣列會呼叫預設建構函式,而不是你寫的那個。

每個類都自動生成預設建構函式,是無參的。

c++裡用類的乙個物件初始化該類的另乙個物件是什麼意思

5樓:諾諾百科

類的物件之間的初始化:如果用a初始化b,則b 是a的副本。相當於複製作用。

構造型別變數和基礎型別變數一樣,可以用來初始化同乙個型別的物件(使用複製建構函式),也可以初始化不同型別的物件(使用轉換建構函式),通過複製建構函式,還可以複製,前提是這些建構函式是確實存在的(系統會預設給出相關函式,但往往不能滿足條件)。

6樓:歐丹亦藍梧

給你舉個例子吧,比如有個class

a以及它的乙個物件a,那麼現在要定義它的另乙個物件,這樣定義:

ab(a);

這就是「c++裡用類的乙個物件初始化該類的另乙個物件」,如果是這樣初始化,就會呼叫拷貝建構函式。

7樓:網友

就是把類的物件作為引數,初始化另乙個物件。

classobjint

b;inc;};

c++中兩種初始化的區別和原因

8樓:物理公司的

首先,我們應該明確的是在c++中初始化不是賦值,因為初始化是必要的,如果讀取了未初始化的值將會導致不明確的行為。初始化指建立變數並且給它賦初值,而賦值則是擦除物件的當前值並用新值代替。c++支援兩種初始化變數的方式:

複製初始化和直接初始化:

int ival(1000);//直接初始化是將初始化式放在括號裡int ival=1000;//複製初始化是用等號(=)那麼這兩種方式有什麼區別呢?我們可以這樣認為,對於內建型別來說,複製初始化和直接初始化幾乎沒有差別,對於類型別來講,當建立類型別物件時,初始化的複製形式和直接形式有所不同:直接初始化直接呼叫與實參匹配的建構函式,複製初始化總是呼叫複製建構函式。

複製初始化首先使用指定建構函式建立乙個臨時物件,然後使用複製建構函式將那個臨時物件複製到正在建立的物件:

9樓:匿名使用者

是哪兩種初始化的過程呢。

c++中兩種初始化的區別和原因

10樓:網友

類的建構函式在初始化成員時,有以下兩種方式:

方式一:csomeclass::csomeclass()

方式二:csomeclass::csomeclass() x(0), y(1)

方式一我們可以稱為賦值初始化,通過在函式體內進行賦值初始化。

方式二我們稱為列表初始化,在冒號後使用初始化列表進行初始化。

這兩種方式的主要區別在於:

對於在函式體中初始化,是在所有的資料成員被分配記憶體空間後才進行的。

列表初始化是給資料成員分配記憶體空間時就進行初始化,就是說分配乙個資料成員只要冒號後有此資料成員的賦值表示式(此表示式必須是括號賦值表示式),那麼分配了記憶體空間後在進入函式體之前給資料成員賦值,就是說初始化這個資料成員此時函式體還未執行。

在大多數情況下,使用兩者並沒有什麼太大區別。但是,第二種方式會更好些。

有兩個原因使得我們選擇第二種語法,它被稱為成員初始化列表:乙個原因是必須的,另乙個只是出於效率考慮。

讓我們先看一下第乙個原因——必要性。設想你有乙個類成員,它本身是乙個類或者結構,而且只有乙個帶乙個引數的建構函式。

class cmember

因為cmember有乙個顯式宣告的建構函式,編譯器不產生乙個預設建構函式(不帶引數),所以沒有乙個整數就無法建立cmember的乙個例項。

cmember* pm = new cmember; // error!!

cmember* pm = new cmember(2); // ok

如果cmember是另乙個類的成員,你怎樣初始化它呢?你必須使用成員初始化列表。

class cmyclass ;

必須使用成員初始化列表。

cmyclass::cmyclass() m_member(2)

沒有其它辦法將引數傳遞給m_member,如果成員是乙個常量物件或者引用也是一樣。根據c++的規則,常量。

11樓:小飛飛

基於賦值的建構函式,會首先呼叫預設的建構函式為其成員變數進行初始化,再賦值。就是執行兩次上述操作。(詳細可以將effective c++的條款4)

c++中初始化和賦值的區別求指教

12樓:千鋒教育

int a=12 ; //初始化, copy 0x000c to a

a =12 ; //賦值, copy 0x000c to a

1、靜態變數在定義時未顯式地指定初值,則自動初始化為相應型別的零值(數值型為0或;字元型為'\0'),即靜態變數能夠自動初始化(有稱之為隱式初始化),且靜態變數只初始化一次。靜態變數定義時顯式地指定了值,則其初值為指定的值。定義時無論是否顯式地指定了初始值,都只能被初始化一次。

但可以通過賦值的方式多次修改靜態變數的值。

2、初始化與賦值是不同的概念。

靜態變數的初始化是在編譯時進行,變數的賦值是在函式或程式執行時進行。靜態變數只初始化一次,但可以通過賦值的方式多次修改靜態變數的值。

以下程式要求主函式中每個迴圈結束後都能輸出5行星號。分析以下程式的輸出結果。

int i;

main()

void pr()

請分析:pt函式同樣被呼叫了5次,但結果只輸出了一行星號,而不是5行星號。驗證了靜態變數的賦值和靜態變數的初始化的不同概念。

void pt()

void pk()

13樓:小肖百事通

給變數賦值的時候,一般的格式如下:

變數名 = 表示式;

例如:int a;

a = 1 + 2;

也可以連續給多個變數賦值,格式如下:

變數名1 =變數名2 = ..=變數名n = 表示式;

例如:int x, y, z;

x = y = z = 100;

等價於:z = 100;

y = z;

x = y;

分析:使用資料型別定義乙個變數,而且在定義變數的時候,給其設定初始值。

提問初始化呢?

其中,var_list是需要初始化的變數列表。

這三個方法都可以哦,親親。

C語言賦值和初始化的區別,c語言賦值中什麼叫初始化賦值,和賦值有什麼區別嗎

在定義了一個變數後就會給變數分配一個地址,但不會自動賦值,只有執行的時候,若變數依然沒有賦值,結果要使用此變數的時候會隨機賦值。定義一個某型別的變數,系統就會給它分配一個地址,大小就是這個型別的大小。如果你沒初始化,系統中這個變數指向的地址裡邊可能以前已經存了一個數,這個數是多少?未知的。所以說變數...

請問java中例項化和初始化區別是什麼

初始化一次,例項化多次,你這麼記就沒問題了!比方一個類,第一次被使用的時候,靜態的資源,包括變數,方法,靜態 塊,會進行初始化。實在記不住,這麼想好了,第一次使用,才叫初始化,對吧,那麼初始化最先載入的,當然是靜態的資源。比如,一個類,有靜態變數,static int a 1 這個靜態變數,就會被初...

如何恢復聯想e430c膝上型電腦的初始化

還原thinkpad edge e430c的系統1 首先開啟開機電腦,在 選擇作業系統 介面點選 更改預設值或選擇其他選項 2 在 選擇 介面下點選 選擇其他選項 3 在 選擇一個選項 下點選 疑難解答 4 在 疑難解答 介面下點選 初始化電腦 然後點選 下一步 5 在 初始化電腦 介面下,我們根據...