2016年5月22日 星期日

為什麼要使用 C++ 而不要用 C

接觸 [C++] [1個月]
覺得比較重要的概念 (入門)
我在寫C的時候就發現一些問題了
[雙向鏈結](https://goo.gl/XGvMhh)
-
1.如果你寫過一堆副程式,你就會發現資料的傳遞
真的很麻煩,不得不用結構去組成
一堆變數你根本沒辦法搞清楚誰是誰
-
2.再來就是傳遞時候,因為不是在同一個區域(不同副程式)
記憶體不共用,變數沒辦法直接修改
比如說你有一個 i=10; 你沒辦法 add(int i){...}
就修改 i 的數值,這會造成不少困擾
(比如說沒辦法將功能拆到函式內
拆不出去只能寫在主程式,寫多了
等你回頭一看的時候你就知道完蛋了)
逼不得已只能用指標去操作
int x=5, *i=&x; add(int *i){...}
如此一來就能直接改了
-
3.即便滿足以上條件,還是有個大問題
有些根本無關聯的變數你不想塞在
同一個結構內(無關聯的到時候亂掉)
就變成每個副程式都要導入一堆參數
typedef struct struct _node node;
struct struct _node {...};
void fun(node a, int a, int b, int c, int d, int e ){...}
這個就不好解啦XD 乖乖一個一個打
-
如果用類別去寫,上述問題大多能改善
1. 他本身就有點類似結構概念可以放很多變數
2. 在同一個類別內不同副程式仍可以直接存取 this->a
3. 都直接存取了,當然就不用導入了
(即便不同類別還有[朋友], [繼承]的方法可以共用)
-
比較不一樣的地方是類別的使用可以用 點
class demo{...};
demo temp(0); //初始數值0
temp.ad(1).ad(2).ad(3); // 0+1+2+3=6
temp.pri(); //印出
看出來了嗎如果是傳統副程式
1. 上述做法大概要分行了
int temp=0,*p=&temp;
ad(p,1);
ad(p,2);
ad(p,3);
printf(...);
2. 還有一種情況全部都塞在裡面
[ad(ad(ad()));]這真的會害人看不懂XDD
-
阿對了還有一個很重要的概念
不要花太多時間在沒有報酬的程式上
每一次的寫作,考慮以後是否能重複使用
然後就這樣把她留下來,不要同一個坑跌兩次
要嘛就花很多很多時間一次弄到最好
要嘛就隨便剪剪貼貼湊出功能,管他有沒有排版
前者你賺到了一份完整可以重複使用程式碼,
而且不用擔心未來的自己看不懂,
後者你賺到時間,把時間花在有用的事情上吧
畢竟一次性的功能也沒人會去看程式碼的XDD

沒有留言:

張貼留言