C++的class和其他的高級語言如C#/Java有些不一樣。這是C++面向?qū)ο蟮暮诵摹?/p>
創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括嘉蔭網(wǎng)站建設(shè)、嘉蔭網(wǎng)站制作、嘉蔭網(wǎng)頁制作以及嘉蔭網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,嘉蔭網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到嘉蔭省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
一點(diǎn)一點(diǎn)來:
一 , 創(chuàng)建class
#includeusing namespace std; class My_First_Class { public: int a; }; int main() { My_First_Class c; c.a = 2; cout << c.a << endl; return 0; }
重點(diǎn):
①:創(chuàng)建類 , 需要用關(guān)鍵字class。
②:class也是一種數(shù)據(jù)類型,{}外面需要以;來結(jié)束。
注意點(diǎn):
①:int a 不能被初始化 , 原因:class沒被初始化之前是沒有空間分配的,當(dāng)然其所有的成員也是沒有空間的。
②:關(guān)于訪問修飾符在C++中有3中 private , protected , public
1, 在class中默認(rèn)為private , 在struct中默認(rèn)為public
2, class中,訪問修飾符可以有多個(gè), 其作用范圍為 : 其位置到下一個(gè)訪問修飾符的位置(如果沒有下一個(gè)訪問修飾符則是到class結(jié)束位置既是 “}”),如下圖:
③:My_First_Class c; 這種初始化是把My_First_Class類對象c放在了棧區(qū)。其實(shí)可以將其放入堆去,其方案是利用指針。代碼如下:
#includeusing namespace std; class My_First_Class { public: int a; private: int c; }; int main() { //My_First_Class c; //a = 2; My_First_Class *c = new My_First_Class; c->a = 3; cout << c->a << endl; delete c; return 0; }
其結(jié)果如下圖:
到目前我們會(huì)發(fā)現(xiàn)一個(gè)很基礎(chǔ)的問題 , 成員的初始化(如果等待調(diào)用者自己一個(gè)一個(gè)用代碼實(shí)現(xiàn)初始化的話 ,很有可能會(huì)漏掉),當(dāng)然在C#/Java等高級語言中 , 這個(gè)就不成問題了。
在C++中,提供了構(gòu)造函數(shù)可以提供初始化的
#includeusing namespace std; class My_First_Class { public: int a; My_First_Class() { a = 1; } private: int c; }; int main() { My_First_Class c; cout << c.a << endl; /* My_First_Class *c = new My_First_Class; c->a = 3; cout << c->a << endl; delete c; */ return 0; }
注意:
①:構(gòu)造函數(shù)和C#/Java一樣 , name使用class的名稱 , 而且沒有返回值
②:構(gòu)造函數(shù)默認(rèn)應(yīng)該放在public之下,不然會(huì)報(bào)錯(cuò)。
③:構(gòu)造函數(shù)必須要在需要初始化成員的后面創(chuàng)建,如要初始化a(int) , 必須在int a;的后面創(chuàng)建。
初始化列表:
#includeusing namespace std; class My_First_Class { public: int a; private: int c; public: My_First_Class():a(1),c(2) { } }; int main() { My_First_Class c; cout << c.a << endl; /* My_First_Class *c = new My_First_Class; c->a = 3; cout << c->a << endl; delete c; */ return 0; }
注意:
①:My_First_Class():a(1),c(2) 賦值的順序是a , c的聲明的順序:
和在構(gòu)造函數(shù)中:后面寫的順序無關(guān):
如下面的寫法,就不會(huì)得到預(yù)期的值:
#includeusing namespace std; class My_First_Class { public: int a; int m; My_First_Class():m(2),a(m) { } }; int main() { My_First_Class c; cout << c.a << endl; cout << c.m << endl; /* My_First_Class *c = new My_First_Class; c->a = 3; cout << c->a << endl; delete c; */ return 0; }
結(jié)果為:
因?yàn)橘x值的順序是先a后m(a在m前進(jìn)行了聲明)
當(dāng)然 , 構(gòu)造函數(shù)也可以是有參的和C#/Java一樣 , 這里就不講了
二:類內(nèi)聲明 , 類外定義
#includeusing namespace std; class My_First_Class { public: int a; int m; My_First_Class():m(2),a(1) { } int sum(); }; int My_First_Class::sum() { return a + m; } int main() { My_First_Class c; int sum = c.sum(); cout << c.a << endl; cout << sum << endl; /* My_First_Class *c = new My_First_Class; c->a = 3; cout << c->a << endl; delete c; */ return 0; }
運(yùn)行結(jié)果 :
當(dāng)然 , 這種只是演示(實(shí)際開發(fā)中不這么搞) 。 實(shí)際開發(fā)中 , 將聲明寫在都文件中 , 將實(shí)現(xiàn)寫在源文件中:
定義一個(gè)頭文件:
實(shí)現(xiàn):
#includeusing namespace std; #include "HeadOne.h" My_First_Class::My_First_Class() { a = 10; } int main() { My_First_Class c; cout << c.a << endl; /* My_First_Class *c = new My_First_Class; c->a = 3; cout << c->a << endl; delete c; */ return 0; }
結(jié)果: