作者flydragon198 (阿凡達要看3D的)
看板C_and_CPP
標題Re: [問題] 關於物件導向的三個特色
時間Tue Jan 19 01:28:41 2010
並不是不用物件導向就很難表示,以前沒物件導向,程式也照樣滿天飛XD
會發展物件導向,是因為這樣做有很多優點
一來是省時省力,你寫過的程式碼,只要用繼承,不用另外重複寫一遍
節省效率,當然你也可以再重複寫一遍完全一樣的,這並沒錯
例如你定義了一個類別,裡面宣告了一萬個int
class you{
int a;
int b;
int c;
.......
int 第一萬個;
}
你今天如果要宣告一個完全一樣的類別,只是要多第一萬零一個屬性,例如char name
那麼你要重複打一遍?或者複製過來超佔空間?還是用最偷懶的方式
class you1 : public you
{
char name
} ;//好像是這樣吧XD
上面可能用法語法應該有錯@@我只是舉例,沒有很嚴謹寫出來~~
這樣程式碼不僅很容易明瞭,你還可以知道you1類似you,只是多一個char的屬性
而多型,也是為了方便,例如你寫了一個把數值丟進去就可以相乘的函式
而乘法,可能有兩個數相乘,或三個數相乘,或四個數相乘
或者浮點數乘整數,整數乘整數,浮點數乘浮點數
你可以寫
乘法1(int , float)
乘法2(float,float,int)
.......寫一堆
然後在main裡面又用一堆判斷式來判斷要呼叫哪個 乘法X()
或者利用多型,雖然還是要寫一堆 乘法()
但是在main裡面,會自動幫你依據函式簽名而決定呼叫哪一個乘法()
例如
乘法(int , float)
乘法(float,float,int)
你在main裡面寫乘法(a,b,c)
他自動會幫你呼叫乘法(float,float,int),因為引數有三個
你不用寫程式去判斷要呼叫乘法1()還是乘法2()
寫乘法(d,e)
他會自動幫你呼叫乘法(int , float),因為引數兩個
當然如果你要寫程式自己判斷呼叫哪個乘法X,那也沒有錯
我上面說的沒有很嚴謹表達,語法和一些細節,應該有很多錯誤,
也請其他大大不吝指教
※ 引述《hazton (hazton)》之銘言:
: 從學了C++開始就大概知道物件導向語言的三種特色:
: 繼承、封裝、多型
: 最近在網路上看到一篇文章,
: 內容有強調說如果學物件導向的語言如果不知道如何應用那三個特色
: 那就等於白學了
: 於是我開始回想以前所寫的程式,
: 發現我最多就只有用到"物件"的概念,
: 這三個特色怎樣想也用不到,
: 不過我覺得其實是我自己根本就不太能理解這三項所帶來的好處
: 所以想問問看板上的人,你們會用到這三項特色來做什麼樣的事情呢?
: 而這些事情用不是物件導向的程式來寫的話真的會很難表達出來嗎?
不是表達不出來,只是多很多麻煩,或許你現在寫的程式不大,所以幾乎不會用到
但是當程式有上萬,幾十萬,上百萬行的時候,這些就很重要了
c++ primer精華版這本書蠻不錯的,你可以參考看看,裡面都有詳細說明
c++ primer則是非常詳細XD 我覺得初學可以看精華版那本比較好入門
--
兩袖清風,腦袋空空,無慮也無憂
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.71.224.13
※ 編輯: flydragon198 來自: 219.71.224.13 (01/19 01:29)
推 QQ29:沒看過extend這語法耶 c++的??? 還是java阿.... 01/19 01:40
被你發現了XD extends是java的樣子,我記錯了@@
※ 編輯: flydragon198 來自: 219.71.224.13 (01/19 02:07)
→ fragileness:你多型舉的例子比較像Overloading 01/19 02:34
→ fragileness:一般來說多型是指Polymorphism吧 01/19 02:34
恩恩,沒錯,感謝大大指正,不過我想函式的Overloading也是類似多型的概念
可能用這個會比較不那麼難理解
對不起,是我偷懶XD
※ 編輯: flydragon198 來自: 219.71.224.13 (01/19 02:52)
→ tinlans:compiler 的術語上,function polymorphism 的另一個名稱 01/19 03:04
→ tinlans:就是 function overloading,這個 red dragon book 有講過 01/19 03:04
→ tinlans:,只是「多型」又常被當成 object polymorphism 使用。 01/19 03:05
→ tinlans: (type) 01/19 03:06
→ tinlans: ^ 的簡稱 01/19 03:07
→ tinlans:這裡講的是物件導向,所以自然不是前者,但其實都叫多型。 01/19 03:09
→ tinlans:有的研究所考試會考喔,看起來是 function overloading 的 01/19 03:09
→ tinlans:code 卻有 polymorphism 的選項,沒選到就死了 XD 01/19 03:10
→ loveme00835:AD_HOC 01/19 07:59
→ oddguy:從小弟的實作經歷來看,“繼承”可不是萬能藥哩 01/20 04:12
→ oddguy:不加限制的使用,會出大問題的 01/20 04:12
→ oddguy:具體的,可以參考Effective C++等書 01/20 04:12
推 Arim:妳舉的是overloading吧@@ 01/21 20:54
→ Arim:多型是RUN-TIME決定呼叫哪個FUN 01/21 20:55