c 簡答題 類的建構函式初始列表適用於哪些情形?請舉例說明

2025-07-15 09:25:22 字數 4391 閱讀 4692

1樓:網友

class cexample

建構函式內部賦值。

cexample()

初始化列表僅適用於建構函式,之所以使用初始化列表是由於建構函式函式的生成機制引起的,當類中有const常量或派生類使用基類建構函式時,就必須使用初始化列表。

2樓:網友

適用於成員變數是常數或引用的!

class a

const int n;

int &x;

因為常數是初始化一次後不能再賦值,而且c++中沒有這個語法:

class a ;

所以必須放在初始化列表裡賦值。

引用也是乙個道理,必須在定義的時候指向乙個變數。

3樓:網友

還有類的成員變數時乙個物件時,該成員物件沒有無參建構函式。

c++中什麼型別的成員變數只能在建構函式的初始化列表中進行

4樓:網友

常量成員,因為常量只能初始化不能賦值,所以必須放在初始化列表裡面。

引用型別,引用必須在定義的時候初始化,並且不能重新賦值,所以也要寫在初始化列表裡面。

沒有預設建構函式的類型別,因為使用初始化列表可以不必呼叫預設建構函式來初始化,而是直接呼叫拷貝建構函式初始化。

c++中建構函式,初始化列表和直接賦值有什麼區別嗎?

5樓:倒黴熊

初始化和賦值對內建型別的成員沒有什麼大的區別,像任乙個建構函式都可以。但有的時候必須用帶有初始化列表的建構函式:

1) 成員型別是沒有預設建構函式的類。若沒有提供顯式初始化時,則編譯器隱式使用成員型別的預設建構函式,若類沒有預設建構函式,則編譯器嘗試使用預設建構函式將會失敗。

2) const成員或引用型別的成員。因為const物件或引用型別只能初始化,不能對他們賦值。

還有乙個賦值次數,效率上的區別,初始化引數列表在物件初始化時對成員變數賦值一次,建構函式內直接賦值,對成員變數賦值兩次,一次是物件構造是用預設值進行賦值,第二次是呼叫建構函式賦值。

6樓:

c++新手關注的乙個常見問題是使用初始化表和在建構函式內使用資料成員的賦值之。

間有什麼區別例如以下**。

inline account::

account( const char *name, double opening_bal )

name( name ),balance( opening_bal )

和inline account::

account( const char *name, double opening_bal )

它們的區別是什麼。

兩種實現的最終結果是一樣的在兩個建構函式呼叫的結束處三個成員都含有相同的。

值區別是成員初始化表只提供該類資料成員的初始化在建構函式體內對資料成員設定值。

是乙個賦值操作區別的重要性取決於資料成員的型別。如果對於內建型別和或者複合型別的話,效率上沒有多大的差別,但對於非內建型別的話還是很明顯的。如果屬於類的組合的情況下,用初始化列表的話只需呼叫一次拷貝建構函式,而在建構函式內進行物件的賦值操作的話,會先呼叫預設建構函式一次,再呼叫operator=賦值函式一次,由此可見效率的差別。

7樓:奧茲國託託

有很大的區別。

請參考《c++ primer》

c++定義建構函式必須使用初始化列表的場合

8樓:嚴霜竇天工

明其理,而知其然也。

先給理論。1.初始化。

賦值。a.初始化代表為變數分配記憶體。

變數在其定義處被編譯器初始化(編譯時).

在函式中,函式引數初始化發生在函式呼叫時(執行時).

b.賦值代表"擦除物件當前值,賦予新值".

它不承擔為物件分配記憶體的義務。

中,類成員的初始化於初始化列表中完成,先於建構函式體執行。

即成員真正的初始化發生在初始化列表中,而不是建構函式體中。

再給說明。1.如果類中有乙個成員是乙個引用,由於引用必須給予初始值,因此,引用必須使用初始化列表。

2.同理,const屬性必須給予初始值,必須使用初始化列表。

3.繼承類中呼叫基類初始化建構函式,實際上就是先構造基類物件,必須使用初始化列表。

別的不再說明,什麼時候必須使用初始化列表是很明顯的;

另外,簡單的說,任何時候都鼓勵使用初始化列表,一些別的事情(比如在建構函式中分配資源之類的,請參考raii,resource

acquizition

isinitialization)可以放在建構函式體內完成。

c++建構函式的初始化表列表寫在哪

9樓:砍侃看

建構函式的右小括號也就是),與大括號的中間部分。

class someclass

someclass::someclass():a(5),str("hello world")//初始化列表。

10樓:樂觀的鬼太子

寫在建構函式的小括號()後面。

class c

private:

int a;

float b;};

c++類和初始化列表和預設引數分別是在宣告還是實現時寫?

11樓:網友

1)初始化列表,是指建構函式里面的給值初始化,就相當於int a = 10;類似的,如果在建構函式體裡面賦值,則相當於:int a; a= 10;

如:class a

private:

m_var;

2)預設引數,在c++中,只要是函式都可以有預設引數,預設引數是寫在函式宣告裡面的。

如:void swap(int a = 10, int b= 20);//宣告。

void swap(int a, int b) //實現。

12樓:匿名使用者

預設引數宣告寫,初始化列表定義寫。

什麼情況下必須使用c++的初始化列表

13樓:網友

想先於建構函式初始化成員。

c++中設定類函式成員的預設值和建構函式的初始值有什麼區別

14樓:在晴天的雨傘

一般進行成員變數初始化用兩種方法。

第一種是通過在建構函式內賦值。

class point

point( int x, int y )

private:

int _x, _y;

第二種是使用初始化列表。

class point

point( int x, int y ):x(x),_y(y){}

private:

int _x, _y;

這兩種用法是有區別的。

一、在有些情況下,必須使用初始化列表。特別是const和引用資料成員被初始化時。

class point

point( int x, int y ):x(x),_y(y){}

point()

point( int x, int y )

private:

const int _x, _y;

二、是從效率方面來說的,對於內建型別或複合型別,差異不會太大,但對於非內建資料型別,差異還是很明顯的。

如再給point類新增乙個新的string型別的成員變數。

class point

建構函式內賦值進行初始化。

point( int x, int y, string name )

name = name 這個表示式會呼叫string類的預設建構函式一次,再呼叫operator=函式進行賦值一次。所以需呼叫兩次函式:一次構造,一次賦值。

用初始化列表進行初始化。

point( int x, int y, string name ):x(x),_y(y), name(name){}

name會通過拷貝建構函式僅以乙個函式呼叫的**完成初始化。

即使是乙個很簡單的string型別,不必要的函式呼叫也會造成很高的代價。隨著類越來越大,越來越複雜,它們的建構函式也越來越大而複雜,那麼物件建立的代價也越來越高,所以一般情況下使用初始化列表進行初始化,不但可以滿足const和引用成員的初始化要求,還可以避免低效的初始化資料成員。

15樓:網友

函式成員的預設值指的是預設引數值嗎?這個和建構函式沒什麼關係。

建構函式里面如果對成員函式進行呼叫,可以給成員函式的引數賦值,如果不賦值,那成員函式就用的預設引數值。

如果建構函式不呼叫成員函式,那麼成員函式的預設引數和建構函式一點關係都沒有。

政治的簡答題有什麼答題方法嗎?我簡答題總是找不到重點

答題沒重點主要來是兩種源原因造成的 1基礎知識不牢固bai,2審題du不清。基礎知識,尤其是概念方zhi面的必dao 須牢記,並且要知道它屬於哪一知識點和範疇,比如辯證法還是歷史唯物主義?都得分清。這點只有你自己理解著去背了。如果是審題不清的話,教你一招最簡單的,就是把提問想象成某人對你說的話,然後...

政治簡答題的正確思維有哪些,政治簡答題的正確思維有哪些

1 首先,抄分析題型。說明襲題 就按照 是什bai麼 為什麼 怎麼樣 來答 但因du為題目都有啥zhi達分點,所dao以要挑與題目內容最有關聯的來答 也就是說 是什麼 為什麼 怎麼樣 不一定全要答 作用題 就是答積極作用和弊端 如果有的話 問 為什麼或必要性 一類的 就是原因 意義 如果是單純的問 ...

初二物理簡答題,幾個初二物理簡單的簡答題

本題答案如下,僅供參考 1 聲速的大小可能和介質的種類有關 介質的種類不同,聲速大小也不同。2 聲速的大小可能和介質的溫度有關 傳聲介質都為水時,但溫度不同,聲速大小也不同 幾個初二物理簡單的簡答題 1 試管中的 冰不融bai化,原du因是燒杯中的冰塊沒有完zhi全融化前溫dao度為0度不變版,試管...