一. 物件成員必須採用初始化列表方式進行初始化,否則產生錯誤。
對含有物件成員的物件進行初始化,初始化時按照類定義中物件成員的順序分別呼叫各自物件的建構函式,再執行自己的建構函式,具體看下面**中student(char *temp):teacher(temp) 這行**。
cpp**:
#include
#include
using namespace std;
class teacher
~teacher()
void show();
protected:
int number;
int score;
teacher teacher;
};
void student::show()
編譯執行後結果:
hello world!
1100
free director memory in heap one time.
二.對於不含物件成員的物件,初始化時也可以套用上面的格式,給常量成員和引用成員進行初始化。
類成員的構造是按照在類中定義的順序進行的,而不是按照建構函式說明後的冒號順序進行構造的。c++對變數的初始化允許使用括號方式,int a=10和int a(10)等價,但冒號後是不允許使用=方式只允許()括號方式。
**舉例如下:
#include
#include
using namespace std;
class teacher
~teacher()
char *show();
protected:
char *director;
};
char *teacher::show()
class student
void show();
protected:
int number;
int score;
teacher teacher;
const int ps;
int &pk;
int pa;
int pb;
};
void student::show()
編譯執行後結果:
hello world!
number=1
score=100
pk=678
ps=10
pa=11682643
pb=34
free director memory in heap one time.
分析:由於pa先構造,此時pb還未賦值,所以pa顯示出乙個隨機數。
student(char *temp,int &pk,int j):teacher(temp),ps(10),pb(j),pk(pk),pa(pb+5)中teacher(temp)是構造函式呼叫,而ps(10),pb(j),pk(pk),pa(pb+5)是賦值。
建構函式初始化列表
建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化式。例如 example example ival 0 dval 0.0 ival 和dval 是類的兩個資料成員 上面的例子和下面不用初始化列表的建構函式看似沒什麼區別 example exa...
建構函式初始化列表
c 程式語言中有很多比較重要的概念值得我們去深入 比如今天為大家介紹的有關c 建構函式的相關概念。這一方面的知識在實際程式設計中就是乙個比較重要的應用技術。希望能個大家可以從中學到一些知識。c 建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化...
建構函式初始化列表
class object private int v1,v2 看看願意是 先初始化v2為5,然後初始化v1為 3 倍的 v2 但是結果卻是奇葩的,這個是因為建構函式的初始化列表遵循的原則是先初始化父類 父類也是這個原則,那麼就相當於遞迴 然後初始化本類的成員,最後執行建構函式的函式體 而初始化本類的...