1. 程式人生 > >類建構函式初始值列表

類建構函式初始值列表

       類的成員可以包括函式和成員變數,如果成員變數沒有顯示的初始化時,則應該最好對他們進行顯示的初始化,而不能靠他們的預設初始化,因為有些變數沒有預設初始值的。現在類成員初始化工作都是靠類的建構函式來完成,類中提供預設建構函式來提供初始化類成員功能,
       初始化類成員一般有兩種方式,即類成員定義時賦初始值和使用建構函式,那麼初始化是在建構函式體完成的嗎?答案是否,如果在函式體中對成員進行操作,那只是賦值而不是初始化。建構函式是使用初始值列表來對成員進行初始化的。初始化順序以成員定義的順序為準,即使初始值列表是另外種順序。例:
class A{
public:
A(int i):a(i),c(i),b(i){};
int a;
int b;
int c;
}
類A的建構函式是A(int i):a(i),c(i),b(i){};初始值列表為a(i),c(i),b(i),雖然看起來他們的初始化順序為a(i),c(i),b(i),但是實際初始順序為a,b,c,初始值列表初始順序是依賴類中成員定義的順序

相關推薦

建構函式初始列表

       類的成員可以包括函式和成員變數,如果成員變數沒有顯示的初始化時,則應該最好對他們進行顯示的初始化,而不能靠他們的預設初始化,因為有些變數沒有預設初始值的。現在類成員初始化工作都是靠類的建

建構函式初始列表

表現形式有三種 當前類進行初始化,尤其是當成員變數是一個const或者一個引用型別 class Demo { private: int b; public: Demo(int a):b(a){}; } 需

C++建構函式初始列表

        建構函式初始化列表以一個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟一個放在括號中的初始化式。例如: class CExample {     public:         int a;         float b;      

三種情況必須在建構函式初始列表初始

//const成員的初始化只能在建構函式的初始化列表中進行 //引用成員的初始化也只能在建構函式的初始化列表中進行 class object { public:  object(int num = 0 ,int knum = 0):num_(num),knum_(knum),refnum_(num)  {

C++建構函式初始列表建構函式中的賦的區別

C++類中成員變數的初始化有兩種方式:          建構函式初始化列表和建構函式體內賦值。下面看看兩種方式有何不同。          成員變數初始化的順序是按照在那種定義的順序。 1、內部資料型別(char,int……指標等) class Animal { publ

的成員變數 宣告順序 決定 初始化順序(建構函式初始列表不影響)

類成員的宣告順序決定初始化順序; 建構函式初始化列表不影響初始化順序; C++初始化類成員時,是按照宣告的順序初始化的,而不是按照出現在初始化列表中的順序。 class B { public: //m_b = 2,m_a = 1 B():m

C++中建構函式初始列表為什麼會比建構函式中賦要高效

Test { Test(test& t1) { this->t=t1; } private: test t; } 相信很多人跟我一樣,非常困惑為什麼Test構造時會先呼叫test的建構函式,再呼叫test類的賦值操作符。那是因為賦值操作符不能產生新的物件,Te

C++中預設建構函式建構函式初始列表

1、預設建構函式和建構函式 (1)建構函式:C++用於構建類的新物件時需要呼叫的函式,該函式無返回型別!(注意:是“無”! 不是空!(void))。 (2)預設建構函式:預設建構函式是在呼叫時不需要顯示地傳入實參的建構函式。 一個類如果自己沒有定義建構函式,則會有一個無參且函式體也是空的

CPP建構函式初始化附圖

// Construction.cpp : 定義控制檯應用程式的入口點。 // //a)類無建構函式如不初始化賦值,其屬性的值都是cccc. //b)類有建構函式如不初始化賦值,其屬性的值都是0000. #include “stdafx.h” class SDate { /* int n

c++ 子建構函式初始化及父構造初始

  我們知道,構造方法是用來初始化類物件的。如果在類中沒有顯式地宣告建構函式,那麼編譯器會自動建立一個預設的建構函式;並且這個預設的建構函式僅僅在沒有顯式地宣告建構函式的情況下才會被建立建立。   建構函式與父類的其它成員(成員變數和成員方法)不同,它不能被子類繼承。因此,在建立子類物件時,為了初始化從父類

C++建構函式為什麼要使用初始列表

class Class { int a; double b; string s; void execute(); }; \\第一種寫法 Class::Class(){ a = 0; b = 1.0; s = "stirng"; } \\第二種寫法 Class::Clas

C++中的預設建構函式初始列表和子呼叫父建構函式

預設建構函式:未提供顯式初始值時,用來建立物件的建構函式。 class testClass { public:     testClass();               

C++使用建構函式初始表和建構函式函式體中賦的區別

參考:http://www.360doc.com/content/13/0607/19/1317564_291331713.shtml C++ Primer中在講建構函式初始化列表的時候有這麼一段話:  無論是在建構函式初始化列表中初始化成員,還是在建構函式體中對它們賦

C++建構函式初始列表

建構函式初始化列表以一個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟一個放在括號中的初始化式。例如: class CExample {public:    int a;    float b;    //建構函式初始化列表    CExample(): a(0),b(8.8)    {}

C++ 建構函式初始化呼叫順序及函式內部巢狀函式情況

C++建構函式初始化順序 C++建構函式按下列順序被呼叫:(1、2、3、4是按照優先順序順序來的!) (1)任何虛擬基類的建構函式按照它們被繼承的順序構造; (2)任何非虛擬基類的建構函式按照它們被繼承的順序構造; (3)任何成員物件的建構函式按照它們宣告的順序呼叫;(如果成員物件有前面出現

通過String看拷貝建構函式,賦函式的作用和區別

/*如果不主動編寫拷貝建構函式和賦值函式,編譯器將以“位拷貝”的方式生成自動預設函式.如果類中含有指標變數,這個預設函式會帶來錯誤.以類String的兩個物件a,b為例,a.m_str內容是"hello",b.m_str的內容為"world".將a賦給b,預設賦值函式的位拷貝意味著b.m_str=a

C++建構函式中用引數列表初始化成員

C++建構函式中初始化成員引數列表初始化成員(必須用的原因:物件成員的初始化,const修飾的成員的初始化,引用成員的初始化,子類呼叫父類的建構函式初始化父類成員)引數列表在建構函式執行之前執行,引數列表中執行的是初始化(所有的成員,無論是否出現在引數列表中,都

c++中初始列表建構函式初始

初始化和賦值對內建型別的成員沒有什麼的的區別,在成員初始化列表和建構函式體內進行,在效能和結果上都是一樣的。對非內建型別成員變數,因為類型別的資料成員的資料成員物件在進入函式體前已經構造完成,也就是說在成員初始化列表處進行構造物件的工作,呼叫建構函式,在進入函式體之後,進行的是對已經構造好的類物件的賦值,又呼

C++ 基建構函式帶引數的繼承方式及派生初始

在定義類的時候,會遇到基類的建構函式帶引數,而子類子類建構函式不帶引數,這時候如果以程式碼 a 的方式建立派生類則會出錯。 程式碼 a: class A { public: A(int x, int y):i(x),j(y){ }

C++:面試時應該實現的string(建構函式、拷貝建構函式、賦運算子過載和解構函式

一、string類的4個基本函式是什麼? 建構函式 拷貝建構函式 賦值運算子過載 解構函式 二、函式實現 1.建構函式 String(char* pStr = " ")