C++面向?qū)ο蟪绦蛟O(shè)計(jì)(上)第一周學(xué)習(xí)筆記——Boolan

在完成了C++面向?qū)ο蟾呒壘幊蹋ㄉ希┑谝恢艿膶W(xué)習(xí)之后帐我,有一些總結(jié)和心得在這里通過學(xué)習(xí)筆記的方式分享出來,供也在學(xué)習(xí)C++的小伙伴們用作學(xué)習(xí)交流,如有理解不到位的地方,歡迎批評指正。

一.C++與C的區(qū)別

C++是在C的基礎(chǔ)之上進(jìn)化而來的美尸,因此C++優(yōu)化了C的一些不足。

在C語言中,處理數(shù)據(jù)的函數(shù)和數(shù)據(jù)是分開的胖眷,而由于C語言中沒有提供關(guān)鍵字榕栏,所以這些數(shù)據(jù)一定是全局的;因此這樣一來胯陋,每個(gè)函數(shù)都可以處理這些數(shù)據(jù)蕊温;

而在C++中,有了class這個(gè)關(guān)鍵字遏乔,它能夠把數(shù)據(jù)和需要處理這些數(shù)據(jù)的函數(shù)們都放在了一個(gè)class中义矛,這樣一來就不會(huì)讓外界隨便的去使用這些數(shù)據(jù);換句話說盟萨,這樣就有很好的封裝性凉翻。如下圖所示:


并且,C++分為Object Based(基于對象)和Object Oriented(面向?qū)ο螅┠砑ぃ琌bject Based面對的是單一class設(shè)計(jì)制轰,Object Oriented面對的是多重classes設(shè)計(jì)前计。

二.C++代碼基本形式

C++跟C語言一樣,也具有一定的格式:


1.Header頭文件

首先是頭文件的guard(防衛(wèi)式聲明)垃杖,頭文件的防衛(wèi)式聲明非常重要男杈。


因?yàn)镃++是面向?qū)ο蟮恼Z言,C++代碼需要處理類的多重設(shè)計(jì)调俘,因此就需要考慮類和類之間的關(guān)系伶棒。#include指令是編譯預(yù)處理,在一個(gè)程序的開頭脉漏,我們要把標(biāo)準(zhǔn)庫的頭文件和自己寫的一些頭文件通過編譯預(yù)處理放在開頭苞冯。如果沒有進(jìn)行防衛(wèi)式聲明,在頭文件和源文件中重復(fù)定義的變量編譯是無法通過的侧巨。

Header頭文件的布局:前置聲明舅锄、類的聲明、類的定義


對于class的聲明司忱,分為class head和class body皇忿,有些函數(shù)在class body中直接定義,另一些則在body之外定義坦仍。

2.Inline(內(nèi)聯(lián))函數(shù)

函數(shù)若在class body內(nèi)定義完成鳍烁,便自動(dòng)成為inline候選人。這里繁扎,我認(rèn)為我們在寫函數(shù)時(shí)幔荒,都可以寫inline,因?yàn)榫幾g器會(huì)自動(dòng)識(shí)別能不能成為inline函數(shù)梳玫,不能也不會(huì)有壞的結(jié)果爹梁,inline函數(shù)可以提高程序的運(yùn)行效率。


另外提澎,寫在public中的一般是函數(shù)姚垃,可以被外界調(diào)用;而寫在private中的一般是數(shù)據(jù)盼忌,將數(shù)據(jù)部分封裝起來积糯,不可隨意被外界調(diào)用,這也就是C++優(yōu)于C的地方谦纱。在寫代碼時(shí)看成,Public和private可以任意交錯(cuò)。

3.Constructor(ctor跨嘉,構(gòu)造函數(shù))

在構(gòu)造函數(shù)中可以設(shè)置參數(shù)的初始值绍昂,即默認(rèn)實(shí)參(下圖實(shí)例中默認(rèn)值為0)。初值列(初始列)是構(gòu)造函數(shù)的特有寫法,也可用傳統(tǒng)賦值語句代替窘游。


構(gòu)造函數(shù)可以有很多個(gè)overloading(重載):



上面的例子中唠椭,雖然函數(shù)名稱是一樣的,但在編譯器看來卻是不一樣的忍饰。但是下面這種重載就是行不通的贪嫂,因?yàn)閯?chuàng)建無參對象時(shí),這兩個(gè)函數(shù)都是默認(rèn)把參數(shù)設(shè)置為0艾蓝,因此這兩個(gè)函數(shù)都是可行的力崇,這時(shí)編譯器就不知道該去調(diào)用哪個(gè)函數(shù)。


4.Const?member function(常量成員函數(shù))


該函數(shù)的操作不改變數(shù)據(jù)內(nèi)容赢织。注意:為了避免引起錯(cuò)誤亮靴,只要確定不會(huì)引起數(shù)據(jù)內(nèi)容改變的函數(shù)最好都寫成常量成員函數(shù)的形式。

5.參數(shù)/返回值傳遞:pass by value vs. pass by reference (to const)

傳遞一個(gè)引用的效率更高于置,但是在有些情況下茧吊,不得不去傳值。如果一個(gè)變量是在函數(shù)中所定義的八毯,并且我們也需要這個(gè)變量搓侄,而這時(shí)去返回這個(gè)變量的引用是不行的。因?yàn)楹瘮?shù)一結(jié)束话速,這個(gè)局部變量就自動(dòng)被銷毀了讶踪,傳引用就沒有了意義,這時(shí)就只能夠傳值泊交;相反乳讥,如果我們需要的這個(gè)變量的空間一直存在,那么就可以考慮用傳引用來提高效率廓俭。

6.Friend(友元)


使用友元云石,便可自由取得private中的內(nèi)容,相同class的各個(gè)object互為友元白指。

7.Operator

overloading(操作重載符-1,成員函數(shù))this

所有的成員函數(shù)一定帶著隱藏的this指針酵紫,通常告嘲,誰調(diào)用這個(gè)函數(shù),誰就是this奖地;this是一個(gè)特殊的指針橄唬,編譯器自動(dòng)把調(diào)用者的指針傳給this。

8.Class body之外的各種定義

a.操作符重載-2参歹,非成員函數(shù)仰楚,無this

為了應(yīng)對多種可能用法,開發(fā)多個(gè)函數(shù),可以創(chuàng)建臨時(shí)對象僧界,則直接在類的名稱后()侨嘀,括號(hào)中寫處理方法。

b.在函數(shù)中新創(chuàng)建的local object不能pass by reference

C.C++自定義類型的一些operator是可以被重載的捂襟,比如+咬腕,+=,++

d.下面的例子若沒有返回值葬荷,一次只調(diào)用一次運(yùn)算是可以的涨共,但是,連串輸出則會(huì)受限制宠漩。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末举反,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子扒吁,更是在濱河造成了極大的恐慌火鼻,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘦陈,死亡現(xiàn)場離奇詭異凝危,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)晨逝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門蛾默,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捉貌,你說我怎么就攤上這事支鸡。” “怎么了趁窃?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵牧挣,是天一觀的道長。 經(jīng)常有香客問我醒陆,道長瀑构,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任刨摩,我火速辦了婚禮寺晌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘澡刹。我一直安慰自己呻征,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布罢浇。 她就那樣靜靜地躺著陆赋,像睡著了一般沐祷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上攒岛,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天赖临,我揣著相機(jī)與錄音,去河邊找鬼阵子。 笑死思杯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挠进。 我是一名探鬼主播色乾,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼领突!你這毒婦竟也來了暖璧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤君旦,失蹤者是張志新(化名)和其女友劉穎澎办,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體金砍,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡局蚀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了恕稠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琅绅。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鹅巍,靈堂內(nèi)的尸體忽然破棺而出千扶,到底是詐尸還是另有隱情,我是刑警寧澤骆捧,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布澎羞,位于F島的核電站,受9級特大地震影響敛苇,放射性物質(zhì)發(fā)生泄漏妆绞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一枫攀、第九天 我趴在偏房一處隱蔽的房頂上張望括饶。 院中可真熱鬧,春花似錦脓豪、人聲如沸巷帝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春笤闯,著一層夾襖步出監(jiān)牢的瞬間堕阔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工颗味, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留超陆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓浦马,卻偏偏與公主長得像时呀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子晶默,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容