[C++程式設計] 學習筆記-物件導向之class, object, instance的差別

文章推薦指數: 80 %
投票人數:10人

[C++程式設計] 學習筆記-物件導向之class, object, instance的差別 ... 老實說,這幾個詞都有自己的一堆翻譯,讓人很頭痛;例如object會被翻成物件、物體、實體、對象 ... 首頁»♥學習筆記Learning»程式語言Coding»[C++程式設計]學習筆記-物件導向之class,object,instance的差別 前面講了那麼多亂七八糟的東西,現在,我們直接來討論一些常見字吧!因為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。

有人說這是一個iskindof的關係,也就是說“寶貝女兒是一個女人”,這句話我也有點看不懂沒關係。

XD method 看來我舉的例子有點不太好,總覺得解釋使用女人的方法有點怪怪的,請大家將就點,感謝…( ̄□ ̄|||)a 幾個詞搞懂了以後,我們來看方法(method);方法分為類別方法(classmethod)與實例方法(instancemethod)。

這…依照我們很爛的例子來直譯的話,就是「使用女人的方法」與「使用寶貝女兒的方法」。

冏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裡的提問方法,可能就可以問到答案囉!@@” 所謂的類別方法(classmethod)就是告訴你說,對任何一個女人這樣提問,或許都能夠得到答案,答案看人。

但是實例方法(instancemethod)也就是你家寶貝女兒的內容呢?就專屬於她自己的,答案就是你寶貝女兒的。

所以,我們用這些方法將寶貝女兒的資料叫出來可能是這樣的。

「我們家的小寶貝幾歲了啊?」『三歲…』 「我們家的小寶貝愛不愛爸爸啊?」『…』(陷阱題:小孩子還不知道什麼是愛的意思。

) 「我們家的小寶貝喜歡什麼啊?」『蘋果…』(模糊的問題,會造成錯誤的結果。

QQ) 「我們家的小寶貝乖不乖啊?」(請欣賞以下影片…) 台灣高雄的Sandy與Mandy   好吧!影片完全無關,純粹是我自己想放!被毆飛…(‵□′)───C<(─___-)||| interface 關於介面,也是一個我會跟方法(method)會有點搞不清狀況的地方,這部分尚在理解當中。

如果你很清楚差別,拜託你教我 iheritance 有的時候,我們在某個已經確定的類別裡面,會希望再增加更多的條件,來讓女人的歸類更細。

譬如,正妹這個例子,哈哈~因為之前看到有個網誌介紹的太有趣了。

1:class正妹{ 2: 3:public: 4:string女人名字; 5:bool第二性徵; 6:bool長得漂亮; 7: 8:};   當然,你也可以繼續歸納下去。

譬如:性感正妹、甜美正妹、火辣正妹、氣質正妹之類的,注意這只是分類。

(小聲說:不知道為什麼一直用正妹這個詞,瞬間會讓我覺得自己像個宅男Orz||||) 如果分開定義時,大概就是這個樣子,我們會發現第4行與第5行的定義是和女人定義重疊的。

因此,我們可以將正妹視為女人的子類別或衍生類別,在女人的定義之上加了長得漂不漂亮的條件。

這個時候,正妹(derivedclass)與女人(baseclass)之間的關係可以這樣使用。

1:class正妹:public女人{ 2:public: 3://balbala可以問正妹的問題 4: 5:private: 6://balabala正妹的秘密 7:}; 好!我掰不下去了,先休息去了:)目前自己慢慢釐清中,等到想到更好的講法再來掰(誤)。

  (待續…) 相關 Abouttheauthor 蕾咪 蕾咪,來自台東,卻不定期旅居歐洲的工程師女孩,身兼作家、部落客、創業家等多重身份。

畢業於台大電子所,曾在義大利商與美商擔任研發工程師;走訪世界後,發現對台灣有段割捨不了的愛,讓我們一起努力成為想要的自己吧!:)合作邀稿請聯繫:[email protected] Viewallposts Youmayalsolike 15Comments 類別改用女生會比較適當~哈哈哈 Reply 哈哈哈感謝建議!!! Reply 這篇好好笑喔~~~我笑翻XDDDD Reply 這篇這麼久遠的文章,妳怎麼一下子就看到了XD Reply 你為什麼要到別人家撒野… Reply 這…兇手是阿福與藍彤(亂扯中)。

我的迴響一直收到垃圾留言。

=”= 藍彤說,妳去參考看看香腸的留言板,阿福丟了香腸的教學文。

剛剛才裝好,可是我還不知道怎麼換圖片與改暱稱Orz||||||| — 哈哈原來講的是強尼XD Reply 哈哈,你可以FB或skype敲我,找阿藍要就有我的聯繫方式了。

Reply OK~~~哈哈感謝你寫了這麼多教學文啊! 不要玩食物!…..XDDD 大笑!!!!!!!!!!XDrz 謝謝您的評論,class跟struct的差異我會再看看,謝謝~ Reply 哈哈沒有啦!:)一起交流是好事。

至少可以幫助我釐清不清楚的地方。

感謝妳~ Reply 您好, 最近剛好有些心得,來分享下 把class想成一個新的type就行了,就類似在C中用struct關鍵字定義一個新的type一樣,就像int/double這類的type一樣,所以一個obj就是那個type的變數,只不過class能包含function進去且其member的scope也可以設定為外面看不到(還有class的this指標的運用也不大相同),這是從C的struct談過來,我覺得有相似的地方 classmethod跟instancemethod的差異,主要應該在classmethod它是屬於classlevel的method,不需要宣告變數(object)就能用,也不能acess到非static的member;而instancemethod一定得宣告變數(object)才能用,能access到非staticmember 僅是個人想法,有錯還請指教 Reply 呵呵謝謝妳的分享。

這樣的說明很清楚。

:) 不過因為不是每個人都是學過C,再學過C++的。

所以,不見得每個人都清楚struct的使用方式。

這對於從C轉換成C++的開發者是相對好理解的方式。

class與struct在用法上,還是有些許的不同。

Method的部分,我不太會表達,很謝謝妳的補充。

XD Reply 想請教一下classmethod和instancemethod 因為我依然有點不太明白 在我理解中..class可以比作一張設計圖.而object就是一個根據設計圖make出來的物件 那..instancemethod是不是指在object中的method?根據不同object就有不同的參數? 那..classmethod就一定是設計圖中的method吧 感覺硬是有點怪怪的 Reply LeaveaCommentXCommentName* Email* Website 在瀏覽器中儲存顯示名稱、電子郵件地址及個人網站網址,以供下次發佈留言時使用。

用電子郵件通知我後續的迴響。

新文章使用電子郵件通知我。

Δ 電子郵件位址 訂閱(Subscribe) 蕾咪,來自台東,卻不定期旅居歐洲的工程師女孩,身兼作家、部落客、創業家等多重身份。

畢業於台大電子所,曾在義大利商與美商擔任研發工程師;走訪世界後,發現對台灣有段割捨不了的愛,讓我們一起努力成為想要的自己吧!:) ♥歐美旅遊|歐美網購|歐美精品♥ ♥小資理財|海外投資|被動收入♥ 合作邀稿請聯繫:[email protected] ♥蕾咪讀者專屬。

歐美電商折扣碼♥ ♥歐美旅遊懶人包♥ ♥蕾咪讀者專屬。

跨國旅遊優惠♥ ♥歐美電商攻略♥展開全部|收合全部 ♥巴黎自由行攻略♥展開全部|收合全部 ♥倫敦自由行攻略♥展開全部|收合全部 ♥義大利自由行攻略♥展開全部|收合全部 ♥PTT論壇♥自我成長x感情相處 [PTT]大家都用什麼方式督促自己呢?談實踐夢想與達成目標的方式。

(WomanTalk) [PTT]如何離開沉迷網路遊戲的自己? [PTT]對學歷的迷惘(CareerPlan) [PTT]胖女生如何挑衣服?(Mix_Match) [PTT]如何愛一個人,讓所愛的人感到幸福? [PTT]要什麼條件才能讓男生想追求? [PTT]如何找回消逝了的單純之心? [PTT]如何讓"個性"變的有魅力? ♥PTT論壇♥理財系列文展開全部|收合全部 點我→追蹤蕾咪IG



請為這篇文章評分?