[C++程式設計] 學習筆記-物件導向之class, object, instance的差別
文章推薦指數: 80 %
[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
延伸文章資訊
- 1物件(Object)和類別(Class) 兩者之間的關係| 石頭的coding之路
- 2類別Class、物件Object 和實體Instance的差別?[轉錄] - AI反斗城
類別Class、物件Object 和實體Instance的差別?[轉錄] · 類別算是一個藍圖、一個範本、一個可參考的文件,他沒有實體(Instance) 的概念,屬靜態的。 · 物件是一個看的...
- 3類別(class)與物件(Object)的差異 - Epic
一開始學Java的時候往往沒辦法理解類別和物件兩者的差異,這篇文章希望能釐清這點.首先,先看底下兩張圖: 這兩…
- 4物件與類別物件(object)是什麼? 物件(object)是什麼? 視窗物件
類別中還可以定義所需的功能函數稱為成員函數. (member function)。 ▫ 加上行為(函式)的結構─類別(class). ▫ 把「資料」與處理資料的 ...
- 5Day 11 淺談物件導向(一):class與method - iT 邦幫忙
物件導向對於初學者來說可能是個較容易混淆的概念。 要搞懂物件導向,首先要釐清類別(class)、屬性(property)、方法(method)、實體(instance)之間的差別及用法。