看板 C_and_CPP 關於我們 聯絡資訊
在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
Sidney0503: 可是定義可是宣告 03/24 14:35
Sidney0503: 但是初始化的速度跟給值的速度會不一樣 03/24 14:36
Sidney0503: 在constructor會用 :a(0) 這是初始化的行為 03/24 14:37
抱歉,我好像敘述得不夠仔細, 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
loveflames: 初始順序不一樣 03/24 15:02
是我誤會了, 剛剛去翻 C++11 Language Extensions,懂S大跟l大的意思了! 感謝^_^ ※ 編輯: prosperous (140.112.25.105), 03/24/2017 15:25:25
steve1012: 你寫的是in-class initialization 03/24 15:53
steve1012: 理論上跟:a(0) 一樣 03/24 15:54
steve1012: 當你有很多種constructors的時候蠻好用的 03/24 15:54
loveflames: 嚴格來說2不是初始化,a是ref或const就不能這樣了 03/24 19:18
Raymond0710: 可隱藏實作部分在.c中 避免重複定義可要用#define保 03/26 19:08
Raymond0710: 護機制 03/26 19:08