1、類中定義const
成員,及其初始化
#include class test
};int main()
如何初始化類裡面的const
成員?
首先考慮建構函式初始化
class test
int getci()
}
於是出現了初始化列表
c++中提供了初始化列表對成員變數進行初始化
語法規則:
// 建構函式
// 初始化列表在建構函式的地方使用
// 在建構函式的定義之後,函式體之前,加 :號,初始化列表對成員變數進行初始化
// 用v1對m1進行初始化,用v1,v2對m2進行初始化,用v3對m3進行初始化
classname::classname() : m1(v1), m2(v1,v2), m3(v3)
{}
通過初始化列表對ci 進行初始化
class test
int getci()
};
類成員的初始化, 注意事項:
// 初始化順序和初始化列表無關,和宣告順序相同
classname::classname() : m1(v1), m2(v1,v2), m3(v3)
{}
建構函式是在物件建立完成之後,再呼叫建構函式進行成員變數的初始化,其實是乙個成員變數的賦值函式,並非真正意義上的初始化
初始化列表則是在物件建立的同時就對物件進行了初始化,順序先於建構函式函式體
區別類似於變數的初始化和賦值
int a = 1; // 類似於初始化列表
int a;
a = 1; // 類似於建構函式
#include class value
int geti()
};class test
};int main()
類中的const
成員
編譯器無法直接得到const
成員的初始值,因此無法進入符號表成為真正意義上的常量。
const
成員分配的空間的位置和當前物件一樣,物件在棧區,const
成員就在棧區
#include class value
int geti()
};class test
int getci()
int setci(int v)
};int main()
初始化與賦值的區別:2、小結初始化:對正在建立的物件進行初始值設定
賦值:對已經存在的物件進行值設定
類中可以使用初始化裡列表對成員進行初始化初始化列表先於建構函式體進行
類中可以定義
const
成員變數
const
成員變數必須在初始化列表中指定初值
const
成員變數為唯讀變數
初始化 1 預設初始化 列表初始化
初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...
c 使用初始化列表來初始化字段
includeusing namespace std class student1 student1 int i b i a b 異常順序 發現a的值為0 b的值為2 說明初始化僅僅對b有效果,對a沒有起到初始化作用 student1 int a,int b a a b b 正常順序 發現a b 2...
初始化列表
與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。在c 中,struct和class的唯一區別是預設的克訪問性不同,而這裡我們不考慮訪問性的問題,所以下面的 都以struct來演示。struct foo 初始化列表 ...