前面講了那麼多亂七八糟的東西,現在,我們直接來討論一些常見字吧!因為Rami的筆記是自己寫爽的,就是我寫程式過程中用到什麼,需要查書了解比較清楚一點,我就會查查看,然後邊理解邊使用;尚未成為高手,還沒辦法信手拈來,幸好我還買得起高手寫的工具書。所以,終於可以慢慢釐清一點觀念了…
因為我以前是學習C語言的,寫程式一直是使用結構化的程序思考去寫,因此,我得承認,手上拿到一個熱騰騰新鮮的C++程式碼,雖然我看得懂他在做甚麼,可是我卻不懂為什麼作者要這樣寫。
後來,我內心的為什麼,終於找到了答案,那應該就是我學習失落的一角,所謂物件導向的概念。
因此,雖然我用過vector、用過map、也會用cout與cin等等這些,但是,事實上結構就跟擅長用C++的人寫的不一樣,我頂多只是把vector當作一個進化版的Array,class當作強化版的struct去使用,什麼封裝?什麼繼承?什麼多載?一概都不算是有真正的用上,這當然讓強大的C++有點傷心,這把牛刀我都拿來切菜。
唯一比較強化的習慣,就是習慣在完成一個功能以後,讓他獨立開來,讓資料在主程式呼叫時,再使用就好。
可是,所謂的「什麼東西都是一個物件」這句話,我一直無法體會。
無法體會的東西,要我怎麼使用的出來呢?也許我應該放掉過去根深柢固的程序導向概念。
這是自己在學習上的一個盲點,我無法確信或記憶「我不清楚為什麼的東西」,頂多短暫的停留在腦海,不知道為什麼,過不久很快就會忘記,也會學習起來內心不踏實,總是覺得少了什麼。
當然,在這種被時間壓力壓迫的情況下,同學應該蠻常覺得我是很不智的。
「哪有這麼多為什麼?會用就好啦!」這句,是我常聽見的話。
或許,這樣說的也對,也許哪天我就開竅了!哈哈~先來慢慢的一點一點的了解吧!
如果我能把程式語言這種語言學的好的話,我猜,很快我也能突破學英文與德文的瓶頸了(笑)
先搞清楚一些常見的名詞,class(類別)、object(物件)、instance、method(方法)。
老實說,這幾個詞都有自己的一堆翻譯,讓人很頭痛;例如object會被翻成物件、物體、實體、對象等…
我寫下的,也就單純是我的理解,建議可以多看幾種說法,至少我現在正在努力體會。Orz|||||||
還有什麼介面、繼承、封裝等,我我我…會努力的理解的Q_________Q
class
如果我們要將人分類,我們有很多種分類的定義方法,譬如…男人、女人、好人、壞人之類的。
1: class 女人{
2: string 女人名字;
3: bool 第二性徵;
4: };
object
因此,class只是將人分類的一種定義,因此假設你老婆懷孕了,你跟上帝禱告說:「給我一個女人吧!」
上帝最疼你了,二話不說在你老婆去做超音波掃描時,掃描出來是女兒,恭喜你當爸爸得到一個女人了。(誤)
通常,我們會這樣宣告,這意思就是跟上帝說你要一個女人,命名為寶貝女兒。
1: 女人 寶貝女兒;
因此,我們會說 寶貝女兒是一個object。 (在此澄清,我絕對沒有物化女性的用意,我也是女人,謝謝。)
instance
再來,就是一個我很容易很object搞混的一個詞了;對我來說很像,又似乎有點不同。
依照前面的例子,我們同樣是這樣宣告的。
1: 女人 寶貝女兒;
這時候我們會說,寶貝女兒是女人的一個instance。
有人說這是一個is kind of 的關係,也就是說“寶貝女兒是一個女人”,這句話我也有點看不懂沒關係。XD
method
看來我舉的例子有點不太好,總覺得解釋使用女人的方法有點怪怪的,請大家將就點,感謝…( ̄□ ̄|||)a
幾個詞搞懂了以後,我們來看方法(method);方法分為類別方法(class method)與實例方法(instance method)。
這…依照我們很爛的例子來直譯的話,就是「使用女人的方法」與「使用寶貝女兒的方法」。
冏rz||||| 我們繼續用程式來舉例,希望大家理解,不對,是幫助我理解Q_____Q。
1: class 女人{
2: public:
3: int 請問你幾歲(int);
4: bool 妳有男友嗎(bool );
5: char 有哪些興趣(enum );
6: string 相處看看她的個性(string );
7:
8: private:
9: int _出生日期;
10: bool _死會了嗎;
11: enum _興趣{A,B,C,D};
12: string _個性;
13: };
扯到方法(method)就需要同時扯到資料(data),通常在private裡的資料,只有class自己看的到,也就是說,只有這個女人自己知道,我們通常在命名的前面習慣加上底線( _ ),代表的是資訊隱藏,你沒辦法直接知道,可是透過public裡的提問方法,可能就可以問到答案囉!@@”
所謂的類別方法(class method)就是告訴你說,對任何一個女人這樣提問,或許都能夠得到答案,答案看人。
但是實例方法(instance method)也就是你家寶貝女兒的內容呢?就專屬於她自己的,答案就是你寶貝女兒的。
所以,我們用這些方法將寶貝女兒的資料叫出來可能是這樣的。
「我們家的小寶貝幾歲了啊?」『三歲…』
「我們家的小寶貝愛不愛爸爸啊?」『…』(陷阱題:小孩子還不知道什麼是愛的意思。)
「我們家的小寶貝喜歡什麼啊?」 『蘋果…』(模糊的問題,會造成錯誤的結果。Q Q)
「我們家的小寶貝乖不乖啊?」 (請欣賞以下影片…)
好吧!影片完全無關,純粹是我自己想放!被毆飛…( ‵□′)───C<(─___-)|||
interface
關於介面,也是一個我會跟方法(method)會有點搞不清狀況的地方,這部分尚在理解當中。
如果你很清楚差別,拜託你教我<(____ _____)>
iheritance
有的時候,我們在某個已經確定的類別裡面,會希望再增加更多的條件,來讓女人的歸類更細。
譬如,正妹這個例子,哈哈~因為之前看到有個網誌介紹的太有趣了。
1: class 正妹{
2:
3: public:
4: string 女人名字;
5: bool 第二性徵;
6: bool 長得漂亮;
7:
8: };
當然,你也可以繼續歸納下去。
譬如:性感正妹、甜美正妹、火辣正妹、氣質正妹之類的,注意這只是分類。
(小聲說:不知道為什麼一直用正妹這個詞,瞬間會讓我覺得自己像個宅男Orz||||)
如果分開定義時,大概就是這個樣子,我們會發現第4行與第5行的定義是和女人定義重疊的。
因此,我們可以將正妹視為女人的子類別或衍生類別,在女人的定義之上加了長得漂不漂亮的條件。
這個時候,正妹(derived class)與女人(base class)之間的關係可以這樣使用。
1: class 正妹 : public 女人{
2: public:
3: //balbala 可以問正妹的問題
4:
5: private:
6: //balabala正妹的秘密
7: };
好!我掰不下去了,先休息去了:) 目前自己慢慢釐清中,等到想到更好的講法再來掰(誤)。
(待續…)
類別改用女生會比較適當~哈哈哈
哈哈哈 感謝建議!!!
這篇好好笑喔~~~我笑翻XDDDD
這篇這麼久遠的文章,妳怎麼一下子就看到了XD
你為什麼要到別人家撒野…
這 … 兇手是阿福與藍彤(亂扯中)。
我的迴響一直收到垃圾留言。= ” =
藍彤說,妳去參考看看香腸的留言板,阿福丟了香腸的教學文。
剛剛才裝好,可是我還不知道怎麼換圖片與改暱稱Orz|||||||
—
哈哈 原來講的是強尼XD
哈哈,你可以FB或skype敲我,找阿藍要就有我的聯繫方式了。
OK~~~哈哈 感謝你寫了這麼多教學文啊!
不要玩食物!…..XDDD
大笑!!!!!!!!!!XDrz
謝謝您的評論, class跟struct的差異我會再看看, 謝謝~
哈哈 沒有啦!:) 一起交流是好事。
至少可以幫助我釐清不清楚的地方。感謝妳~
您好,
最近剛好有些心得, 來分享下
把class想成一個新的type就行了, 就類似在C中用struct關鍵字定義一個新的type一樣, 就像int/double這類的type一樣, 所以一個obj就是那個type的變數, 只不過class能包含function進去且其member的scope也可以設定為外面看不到(還有class的this指標的運用也不大相同), 這是從C的struct談過來, 我覺得有相似的地方
class method 跟 instance method的差異, 主要應該在class method它是屬於class level的method, 不需要宣告變數(object)就能用, 也不能acess到非static的member; 而instance method一定得宣告變數(object)才能用, 能access到非static member
僅是個人想法, 有錯還請指教
呵呵 謝謝妳的分享。
這樣的說明很清楚。:)
不過因為不是每個人都是學過C,再學過C++的。
所以,不見得每個人都清楚struct的使用方式。
這對於從C轉換成C++的開發者是相對好理解的方式。
class與struct在用法上,還是有些許的不同。
Method的部分,我不太會表達,很謝謝妳的補充。XD
想請教一下class method 和instance method
因為我依然有點不太明白
在我理解中..class 可以比作一張設計圖.而object 就是一個根據設計圖make 出來的物件
那..instance method 是不是指在object 中的method? 根據不同object 就有不同的參數?
那..class method 就一定是設計圖中的method 吧
感覺硬是有點怪怪的