如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第三章類別及物件結構體(structure)structPerson//結構體Person宣告{char*name;intage;longinttel;};voidmain(void){voidprintdata(Personp);Personp1;//結構體變數定義:}exampleprog1prog1prog1結構體Prog2Prog2Prog2結構體類別的宣告何謂類別(Class)在C++的語法中,類別與結構體是非常近似的,譬如我們可以將前一節的Person結構體改寫成如下的Person類別:classPerson//類別Person宣告{char*name;intage;longinttel;voidprintdata(;)};觀察類別Person的宣告內容,除了struct改成class以外,似乎無其他的不同。是的,若是只有struct改成class,那C++的物件導向能力只是哄人而已,相信多數的人早棄之於一旁,更不會有讓它有紅透半片天的機會。實際上,類別之所以被採用,其中的原因是它擁有物件導向的重要性:資料封裝(DataEncapsulation)。資料封裝(DataEncapsulation)資料封裝(DataEncapsulation)classPerson//類別Person宣告{private://私有成員char*name;intage;longinttel;public://公用成員voidprintdata();};類別的內容是由兩種成員組成:資料(變數)成員函數成員在上述的Person類別裏,資料成員是nameagetel函數成員是printdata()。資料成員前加上private:代表底下的成員是私有的,由Person類別可知,nameagetel是私有的資料成員。所謂的私有是指在Person類別裏宣告的函數才能對其作處理,其餘外部處理都不能存取該筆資料成員。資料成員前加上private:代表底下的成員是私有的:由Person類別可知,*name,age,tel是私有的資料成員。所謂的私有是指在Person類別裏宣告的函數才能對其作處理,其餘外部處理都不能存取該筆資料成員。函數成員前加上public:代表底下的成員是公開的:一般公開的成員是函數成員,由Person類別知道printdata()是公開的函數成員,而且printdata()的定義,可以置於類別的宣告裏,也可定義於類別宣告的外部,只是須配合範圍運算子::,底下是改寫程式ch3_1.cpp的兩個不同型式例子,Prog3Prog3Prog4Prog4Prog4類別物件的初值設定Constructor關於Constructor的格式說明及特性如下:Constructor的函數名稱需與類別名稱相同,但其不能有傳回值。根據這個特性,Compiler才能辨別何者是Constructor函數。底下是改寫ch3_3.cpp設定初值的init_data()函數程式片斷:classPerson//類別person宣告{private://私有資料成員char*name;intage;longinttel;public://公用函數成員Person(char*name,intage,inttl)//Constructor函數,初值設定{name=nam;age=ag;tel=tl;}voidprintdata();//顯示,處理:};voidmain(void){personp1(”Jason”,5,21200011);//Person類別的物件定義p1.printdata();}由於將原來的init_data()函數改成Constructor函數,因此Person類別的物件p1定義,直接以Personp1(”Jason”,5,21200011);定義,並給初值,而這些初值就是靠Constructor函數,作設定給屬於物件p1的資料成員。當然,你也可以將Constructor函數定義於類別宣告外函數覆載(Overloading)DefaultConstructor函數exampleProg5Prog5Prog5Prog5Prog5DestructorDestructor習慣上,程式的編寫有Constructor時,因為它會自動向系統索取合適的記憶體數量,所以一般都會再加上Destructor,使在程式結束,將所取得的記憶體數歸還給系統Prog6Prog6Tian-LuuWu2Prog7Prog7類別物件的初值設定(二)類別物件的初值設定(二)格式:exampleProg8Prog