[問題] class header(.h)中為定義還是宣告?

看板C_and_CPP作者時間7年前 (2017/03/24 14:34), 7年前編輯推噓4(406)
留言10則, 4人參與, 最新討論串1/1
在C語言中, 我知道header(.h)通常放置的是參數的宣告,到.c中才開始真正定義, 這是為了避免當某個.h有多個.c去include的時候,產生重複定義的錯誤。 基於上述理由,我一直以為C++中class的.h檔和C中.h檔目的是一樣的, 但是最近看到C++ Primer(ch12)中,不像是這個樣子, 就書中敘述的內容, 看起來平常使用的class header(有成員那種),就已經為class做了定義。 這樣讓我不太明白,如果在class中有個成員參數 a, 1. 直接在header中寫上 int a = 0; 2. 在header中寫 int a;,然後再到constructor中寫 a = 0; 想請教一下這兩者有什麼不同? 因為平常看到的情形都是 2.,這只是純粹C語言沿用下來的習慣嗎? 還是有什麼重要部分我疏忽掉沒有考慮進去的呢? 還麻煩大家替我解惑了,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.25.105 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1490337275.A.3A5.html

03/24 14:35, , 1F
可是定義可是宣告
03/24 14:35, 1F

03/24 14:36, , 2F
但是初始化的速度跟給值的速度會不一樣
03/24 14:36, 2F

03/24 14:37, , 3F
在constructor會用 :a(0) 這是初始化的行為
03/24 14:37, 3F
抱歉,我好像敘述得不夠仔細, S大說的應該是main中要用到class的時候了吧? 其實我是想問說, 1. class myClass { public: myClass () {}; ~myClass () {}; private: int a = 0; }; 2. class myClass { public: myClass() {a = 0}; ~myClass() {}; private: int a; }; 1.和2.這兩者的差別這樣 ※ 編輯: prosperous (140.112.25.105), 03/24/2017 14:46:50

03/24 15:02, , 4F
初始順序不一樣
03/24 15:02, 4F
是我誤會了, 剛剛去翻 C++11 Language Extensions,懂S大跟l大的意思了! 感謝^_^ ※ 編輯: prosperous (140.112.25.105), 03/24/2017 15:25:25

03/24 15:53, , 5F
你寫的是in-class initialization
03/24 15:53, 5F

03/24 15:54, , 6F
理論上跟:a(0) 一樣
03/24 15:54, 6F

03/24 15:54, , 7F
當你有很多種constructors的時候蠻好用的
03/24 15:54, 7F

03/24 19:18, , 8F
嚴格來說2不是初始化,a是ref或const就不能這樣了
03/24 19:18, 8F

03/26 19:08, , 9F
可隱藏實作部分在.c中 避免重複定義可要用#define保
03/26 19:08, 9F

03/26 19:08, , 10F
護機制
03/26 19:08, 10F
文章代碼(AID): #1OrBtxEb (C_and_CPP)