c++博大精深,這是很多了解c++的人的感覺。越是深入,越是覺得她會給你很好的訓(xùn)練---讓你成為真正的程序設(shè)計者。
我想從她的初始化工作著手,試圖展現(xiàn)其一角,希望能有助于您提高學(xué)c++和程序設(shè)計的興趣---然后,去發(fā)現(xiàn)、開拓吧,當你把你的智慧融入進去以后,一行行程序就不僅是程序了,因為它就有了生命。
關(guān)于c中的初始化相關(guān)部分,如指針,如全局變量與局部變量默認初始化的區(qū)別,如靜態(tài)變量的默認初始化,就跳過。我們從類開始。
初始化是非常重要的工作,因為你的類(確切說是對象,程序)的執(zhí)行過程就是一系列狀態(tài)變換,而初態(tài)不正確,就不可能到達正確解了。
面向?qū)ο蟮腸++中的初始化工作,是由構(gòu)造函數(shù)來完成的,在其他場景可能稱為構(gòu)造器。這是大家都明白的。但是,展開來,或許您還未必清楚,如,如何設(shè)計好的默認初始化,哪些成員變量只有的初始化形式,組合與繼承的初始化,資源淺拷貝問題,無名對象的問題,特殊需要的初始化(實例對象須化)等等。我將在vc7.0上調(diào)試程序,每次調(diào)試一個,談一個問題,試圖給您解釋清楚。愿于您有所幫助。
這次就說說好的初始化過程與靜態(tài)成員的初始化。
不管程序員如何,面向?qū)ο蟮腸++中初始化工作是必須的!!你寫了一個類,沒有寫構(gòu)造函數(shù),但是,系統(tǒng)會“暗暗的”給你一個系統(tǒng)默認的構(gòu)造函數(shù),在實例化對象的時候它就會工作---要知道,一旦你自己定義了構(gòu)造函數(shù),系統(tǒng)就不會再提供默認構(gòu)造函數(shù)。
問題是,我們應(yīng)該定義自己的構(gòu)造函數(shù)。否則,系統(tǒng)多半是無法達到正確的初始狀態(tài)的!
定義好的構(gòu)造函數(shù),應(yīng)該是給出多版本的構(gòu)造函數(shù),作好安全檢查工作。我們下面給出一個例子,由c++的例子改動邇來。
需要一個類,日期Date,它有成員變量day,month,year,執(zhí)行一些相關(guān)操作。如何進行初始化工作?我們或許會見到下面的代碼:
//...
class Date {
int d,m,y;
public:
Date(int dd=0,int mm=0,int yy=0)
{
d=dd;
m=mm;
y=yy;
}
//...
};
//...
這樣的程序沒有語法錯誤,可以工作,但不是正確工作。下面這個語句會怎么樣呢?
Date oneday(-2,10,2002);
作簡單的檢查,如下面的代碼部分。也是于事無補的。如對下面的語句仍然是無能為力的:
Date oneday(29,2,1981);
//...
class Date {
int d,m,y;
public:
Date(int dd=0,int mm=0,int yy=0)
{
if(dd>=0&&yy>=0&&mm>=0&&m<=31){//
d=dd;
m=mm;
y=yy;
}
//else
}
//...
};
//...
更何況,我們可能會需要用string來初始化,用char *指針來初始化:
string s="29/2/1981";
char *p="29/2/1981";
我想從她的初始化工作著手,試圖展現(xiàn)其一角,希望能有助于您提高學(xué)c++和程序設(shè)計的興趣---然后,去發(fā)現(xiàn)、開拓吧,當你把你的智慧融入進去以后,一行行程序就不僅是程序了,因為它就有了生命。
關(guān)于c中的初始化相關(guān)部分,如指針,如全局變量與局部變量默認初始化的區(qū)別,如靜態(tài)變量的默認初始化,就跳過。我們從類開始。
初始化是非常重要的工作,因為你的類(確切說是對象,程序)的執(zhí)行過程就是一系列狀態(tài)變換,而初態(tài)不正確,就不可能到達正確解了。
面向?qū)ο蟮腸++中的初始化工作,是由構(gòu)造函數(shù)來完成的,在其他場景可能稱為構(gòu)造器。這是大家都明白的。但是,展開來,或許您還未必清楚,如,如何設(shè)計好的默認初始化,哪些成員變量只有的初始化形式,組合與繼承的初始化,資源淺拷貝問題,無名對象的問題,特殊需要的初始化(實例對象須化)等等。我將在vc7.0上調(diào)試程序,每次調(diào)試一個,談一個問題,試圖給您解釋清楚。愿于您有所幫助。
這次就說說好的初始化過程與靜態(tài)成員的初始化。
不管程序員如何,面向?qū)ο蟮腸++中初始化工作是必須的!!你寫了一個類,沒有寫構(gòu)造函數(shù),但是,系統(tǒng)會“暗暗的”給你一個系統(tǒng)默認的構(gòu)造函數(shù),在實例化對象的時候它就會工作---要知道,一旦你自己定義了構(gòu)造函數(shù),系統(tǒng)就不會再提供默認構(gòu)造函數(shù)。
問題是,我們應(yīng)該定義自己的構(gòu)造函數(shù)。否則,系統(tǒng)多半是無法達到正確的初始狀態(tài)的!
定義好的構(gòu)造函數(shù),應(yīng)該是給出多版本的構(gòu)造函數(shù),作好安全檢查工作。我們下面給出一個例子,由c++的例子改動邇來。
需要一個類,日期Date,它有成員變量day,month,year,執(zhí)行一些相關(guān)操作。如何進行初始化工作?我們或許會見到下面的代碼:
//...
class Date {
int d,m,y;
public:
Date(int dd=0,int mm=0,int yy=0)
{
d=dd;
m=mm;
y=yy;
}
//...
};
//...
這樣的程序沒有語法錯誤,可以工作,但不是正確工作。下面這個語句會怎么樣呢?
Date oneday(-2,10,2002);
作簡單的檢查,如下面的代碼部分。也是于事無補的。如對下面的語句仍然是無能為力的:
Date oneday(29,2,1981);
//...
class Date {
int d,m,y;
public:
Date(int dd=0,int mm=0,int yy=0)
{
if(dd>=0&&yy>=0&&mm>=0&&m<=31){//
d=dd;
m=mm;
y=yy;
}
//else
}
//...
};
//...
更何況,我們可能會需要用string來初始化,用char *指針來初始化:
string s="29/2/1981";
char *p="29/2/1981";