為什麼要有初始化列表,初始化列表的作用什麼,那些情況下必須要用初始化列表,這應該是令c++初學者頭疼的問題了。
下面就簡單介紹一下
首先什麼初始化列表呢,我們先理解一下這個概念,c++物件的建立首先是開闢記憶體,然後呼叫建構函式,這裡呼叫建構函式就分為隱式初始化和顯示初始化,顯示初始化的就是直接呼叫建構函式或拷貝建構函式,函式寫什麼樣,就怎麼樣呼叫。
而隱式的就是不是函式呼叫的方式,但是後面操作的依然是建構函式或拷貝建構函式,只是看起來不明顯容而已。
以下三種情況下需要使用初始化成員列表:
一,需要初始化的資料成員是基類物件的情況;
二,需要初始化const修飾的類成員;//在c++中是const常量和引用不能被賦值修改,所以只能初始化
三,需要初始化引用成員資料;
另外乙個原因是效率問題,初始化列表和建構函式內賦值是有區別的當成員是類a時,如果在初始化列表中a只呼叫一次建構函式,但是在建構函式內a卻要呼叫一次構造和一次賦值建構函式。
//建構函式的初始化列表
class date
void show()
private:
int _year;
int _month;
int _day;
};class student
void show()
private:
char _name[20];
const int _age;
float _score;
date _date;//乙個類作為另乙個類的成員變數,成員物件,成員物件怎麼初始化???預設的建構函式
static int _mid;
};int student::_mid = 10;
int main()
{//物件型別,分配記憶體
//成員物件構造
//根據物件的方式呼叫物件的建構函式
char s = "zhangsan";
student stu( s,20,85,2020,02,29,10 );/
stu.show();
c 初始化列表
與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。struct foo 初始化列表 建構函式的兩個執行階段 從概念上來講,建構函式的執行可以分成兩個階段,初始化階段和計算階段,初始化階段先於計算階段 初始化階段 所有...
C 初始化列表
與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。在c 中,struct和class的唯一區別是預設的克訪問性不同,而這裡我們不考慮訪問性的問題,所以下面的 都以struct來演示。struct foo 初始化列表 ...
C 初始化列表
與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。struct foo 初始化列表 建構函式的執行可以分成兩個階段,初始化階段和計算階段,初始化階段先於計算階段。所有類型別 class type 的成員都會在初始化階...