[問題] 類別函式寫在外面? & 何不全使用inline?
以下廢話只是要表達自己是個初學者,如果問了笨問題還請海涵
=====================================================================
大家好 先簡述一下我程式語言菜鳥的歷程
我接觸程式語言是大學的課程,人生第一個程式是c
但是教授為了授課內容很快就跳c++(至少上課範例程式都直接存成cpp)
但可能是因為學店的關係吧,其實也沒講多少深入的東西
後來大三進入java的世界,然後深入學習java下的OO概念。
我其實不知道自己學到怎樣的程度,只能說比較基本的沒問題,
reflect以後的比較沒在碰。
一個月前借了《c++全方位學習》回來摸索c++,最近才讀到類別的章節
發現有些東西跟java的OO概念有點衝突,好不適應XDD 必須要放空去學習
=====================================================================
1.為何要賦予可實作成員函式於定義類別之外(想請問這個動作有術語嗎)?
class CRectangle {
int x, y;
public:
void set_values (int,int);
int area (void) {
return (x*y);
}
}
void CRectangle::set_values (int a, int b) {
x = a;
y = b;
}
為什麼成員函數不在定義類別的時候就決定好,而要在定義類別之外才補完?
是為了提供類似java OO的抽象函數的概念嗎?
(例如定義一個類別叫做動物,動物會"移動",
但實際上怎麼移動是由子類別去實作,所以
動物類別在移動這個成員函式就先不實作。
請問cpp有這個彈性的原因如上述嗎?)
2.inline 好像很棒,預設為何不直接inline?
根據網路資料裏頭提到(大學課程的教材:C++物件導向及增進效率程式技巧)
在 class 內部直接定義完整的函數,和只定義函數的原型而把具體實現放在 class
外部的唯一區別在於,在第一種情況中,編譯器(compiler) 會自動將函數作為
inline 考慮,而在第二種情況下,函數只是一般的 class 成員函數。
然後我又去查inline是什麼東東,以我的了解是:
編譯器會對加上inline的函式進行評估,
當展開函式內容比呼叫函式所花的成本還小時就會直接展開函式
而編譯器也會評估,如果展開後的效益不夠,即便函式加上inline
編譯器也不會進行展開。
如果以上我的了解是正確的
那為何cpp不預設所有函式都是inline的作法?
反正展開的效益有編譯器為我們把關來決定展開與否不是嗎?
為什麼會像現在這樣要由使用者自己決定是否要加inline呢?
--
┌─────────────────────────────────┐
│A)台南無糖紅茶 E)后里龍井茶 │
│B)金馬青梅綠 F)日月潭紅茶拿鐵 │
│C)台北金桔毛峰茶 G)桃園芋泥可可 歡迎光臨裏洽茶鋪 │
│D)竹南純手工愛玉冰 今晚你想來點什麼? │
└─────────────ψliu2007 ───────────────┘
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.192.225.144 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1599189173.A.E56.html
推
09/04 12:03,
3年前
, 1F
09/04 12:03, 1F
→
09/04 12:08,
3年前
, 2F
09/04 12:08, 2F
→
09/04 12:08,
3年前
, 3F
09/04 12:08, 3F
→
09/04 12:08,
3年前
, 4F
09/04 12:08, 4F
→
09/04 12:12,
3年前
, 5F
09/04 12:12, 5F
→
09/04 12:12,
3年前
, 6F
09/04 12:12, 6F
→
09/04 12:12,
3年前
, 7F
09/04 12:12, 7F
→
09/04 12:12,
3年前
, 8F
09/04 12:12, 8F
→
09/04 12:13,
3年前
, 9F
09/04 12:13, 9F
→
09/04 12:13,
3年前
, 10F
09/04 12:13, 10F
推
09/04 12:15,
3年前
, 11F
09/04 12:15, 11F
→
09/04 12:17,
3年前
, 12F
09/04 12:17, 12F
→
09/04 12:18,
3年前
, 13F
09/04 12:18, 13F
→
09/04 12:49,
3年前
, 14F
09/04 12:49, 14F
→
09/04 12:54,
3年前
, 15F
09/04 12:54, 15F
推
09/04 13:00,
3年前
, 16F
09/04 13:00, 16F
→
09/04 13:03,
3年前
, 17F
09/04 13:03, 17F
→
09/04 15:59,
3年前
, 18F
09/04 15:59, 18F
→
09/04 15:59,
3年前
, 19F
09/04 15:59, 19F
→
09/04 15:59,
3年前
, 20F
09/04 15:59, 20F
→
09/04 15:59,
3年前
, 21F
09/04 15:59, 21F
→
09/04 15:59,
3年前
, 22F
09/04 15:59, 22F
→
09/04 19:16,
3年前
, 23F
09/04 19:16, 23F
→
09/04 19:17,
3年前
, 24F
09/04 19:17, 24F
→
09/04 19:17,
3年前
, 25F
09/04 19:17, 25F
→
09/04 19:18,
3年前
, 26F
09/04 19:18, 26F
推
09/05 00:56,
3年前
, 27F
09/05 00:56, 27F
→
09/05 00:56,
3年前
, 28F
09/05 00:56, 28F
推
09/06 10:56,
3年前
, 29F
09/06 10:56, 29F