1. 程式人生 > >< C++ > initializer list 初始化列表(建構函式後面加個冒號的解釋)

< C++ > initializer list 初始化列表(建構函式後面加個冒號的解釋)

Keypoint : 呼叫父類的建構函式(一般為有參建構函式),初始化類中的成員。

C++ primer 5th edition:

Remember
When creating an object of a derived class, a program first calls the base-class constructor and then
calls the derived-class constructor. The base-class constructor is responsible for initializing the inher-
ited data members. The derived-class constructor is responsible for initializing any added data mem-
bers. A derived-class constructor always calls a base-class constructor. You can use the initializer list
syntax to indicate which base-class constructor to use. Otherwise, the default base-class constructor
is used.


When an object of a derived class expires, the program first calls the derived-class destructor and
then calls the base-class destructor.


Member Initializer Lists


A constructor for a derived class can use the initializer list mechanism to pass values along to a base-
class constructor. Consider this example:


derived::derived(type1 x, type2 y) : base(x,y) // initializer list
{
...
}


Here, derived is the derived class, base is the base class, and x and y are variables used by the base-
class constructor. If, say, the derived-class constructor receives the arguments 10 and 12, this mecha-
nism then passes 10 and 12 on to the base-class constructor defined as taking arguments of these
types. Except for the case of virtual base classes (see Chapter 14, “Reusing Code in C++”), a class
can pass values back only to its immediate base class. However, that class can use the same mecha-
nism to pass back information to its immediate base class, and so on. If you don’t supply a base-class
constructor in a member initializer list, the program uses the default base-class constructor. The
member initializer list can be used only with constructors.

相關推薦

< C++ > initializer list 初始列表建構函式後面冒號解釋

Keypoint : 呼叫父類的建構函式(一般為有參建構函式),初始化類中的成員。 C++ primer 5th edition: Remember When creating an object of a derived class, a program first

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

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

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

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

C++初始列表建構函式異同

內建型別成員 int,float,double,long,陣列,指標等。 C++類建構函式初始化列表 以一個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟一個放在括號中的初始化式。例如: class CExample { pub

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

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

淺析C++中的初始列表區別賦值和初始

派生類不能直接訪問基類的私有成員,而必須通過基類方法進行訪問。 具體來說,派生類建構函式必須使用基類建構函式。 建立派生類物件時,程式首先建立基類物件。C++使用初始化列表完成這項工作。 RatedPlayer::RatedPlayer(int r, co

C++11 初始列表initializer_list

clu amp space return ret 列表 stl容器 int stat C++11對原有的初始化列表(用花括號圍住的若幹個值)進行了大幅的擴展。以下寫法在C++11中都是被允許的: 1 int static_arr[5] = {1, 2, 3, 4};

C++中只能使用初始列表只能是初始不能使用賦值的情況

(1)當類中含有const(常量)、reference(引用)成員變數時,只能初始化,不能對它們進行賦值;      常量不能被賦值,只能被初始化,所以必須在初始化列表中完成,C++引用也一定要初始化,所以必須在初始化列表中完成。 (2)基類的建

C++ 初始列表轉載

何謂初始化列表 與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化欄位。在C++中,struct和class的唯一區別是預設的訪問性不同,而這裡我們不考慮訪問性的問題,所以下面的程式碼都以stru

c++11之初始列表

一、前言     C++的學習中,我想每個人都被變數定義和申明折磨過,比如我在大學筆試過的幾家公司,都考察了const和變數,型別的不同排列組合,讓你區別有啥不同。反正在學習C++過程中已經被折磨慣了,今天再來看看重溫下那段“輝煌的歷史”。先來看一段程式碼: Playe

c++ 用引數初始列表對資料成員初始

除了使用建構函式可以對類中的成員變數進行初始化,還可以使用引數初始化列表。這種方法不在函式體內對資料成員初始化,而是在函式首部實現。這樣可以減少函式體的長度。 舉例如下: #include<string> using namespace std; class S

C++複習筆記——初始列表順序

參考測試程式碼1: #include<iostream> using namespace std; class A { public: A(int iniI,int iniJ,int iniK):i(iniI),j(i),k(iniK){}

容器初始之FileSystemXmlApplicationContext建構函式

宅男Coder,沒有其他愛好,閒暇之餘抱著瞻仰的心態去閱讀一下Spring的原始碼,期許能收穫一支半解。要學習Spring的原始碼,第一步自然是下載和編譯Spring的原始碼,這個我在之前的博文中已經發表過了。具體可參考:《SpringFrame

Java基礎——java程式初始順序、建構函式

1. Java初始化順序 當例項化物件時,物件所在類的所有成員變數首先要進行初始化,只有當所有類成員完成初始化後,才會呼叫物件所在類的建構函式建立物件。 3個原則: (1)靜態物件(變數)優先於非靜態物件(變數)初始化。其中,靜態物件(變數) 只初始化一次,而非靜態物件(變數)

java執行過程,初始的順序,建構函式,變數作用域,反射機制,面向物件的特徵

java是解釋性語言 執行過程:程式原始碼經過java編譯器編譯成位元組碼,然後由JVM解釋執行。 Java源程式經過編譯器編譯後變成位元組碼,位元組碼由虛擬機器解釋執行,虛擬機器將每一條要執行的位元組碼送給直譯器,直譯器將其翻譯成特定機器上的機器碼,然後在特定的機器上執

java中靜態初始塊,例項初始塊,建構函式區別

   public class People { public static int num=0;//靜態變數 String name; static//靜態初始化塊 { System.out.println(num+":靜態初始化

java中子類初始流程包括靜態區和非靜態區

一. 類中的方法分為例項方法和類方法兩種,用static修飾的是類方法。二者有什麼區別呢? 例項方法:        當類的位元組碼檔案被載入到記憶體時,類的例項方法不會被分配入口地址,當該類建立物

bootstarp table 初始列的時候,添操作按鈕,事件

/** * 初始化表格的列 */ TaskError.initColumn = function () { return [ {field: 'selectItem', radio: true}, {title: '', field: '

C++子類的建構函式後面:冒號的作用

在C++類的建構函式中經常會看到如下格式的寫法: MyWindow::MyWindow(QWidget* parent , Qt::WindowFlags flag) : QMainWindow(pa

建構函式後面冒號,這傻逼玩意,有病吧

簡單的講:冒號後面跟的是賦值,這種寫法是C++的特性。這麻痺特性有毛病。。。A( int aa, int bb ):a(aa),b(bb) { } 相當於 A( int aa, int bb ) { a=aa; b=bb; }   來一段經典程式碼: #include &l