作者prosperous ()
看板C_and_CPP
標題[問題] class header(.h)中為定義還是宣告?
時間Fri Mar 24 14:34:31 2017
在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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1490337275.A.3A5.html
1F:→ Sidney0503: 可是定義可是宣告 03/24 14:35
2F:→ Sidney0503: 但是初始化的速度跟給值的速度會不一樣 03/24 14:36
3F:→ 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
4F:推 loveflames: 初始順序不一樣 03/24 15:02
是我誤會了,
剛剛去翻 C++11 Language Extensions,懂S大跟l大的意思了!
感謝^_^
※ 編輯: prosperous (140.112.25.105), 03/24/2017 15:25:25
5F:推 steve1012: 你寫的是in-class initialization 03/24 15:53
6F:→ steve1012: 理論上跟:a(0) 一樣 03/24 15:54
7F:→ steve1012: 當你有很多種constructors的時候蠻好用的 03/24 15:54
8F:推 loveflames: 嚴格來說2不是初始化,a是ref或const就不能這樣了 03/24 19:18
9F:推 Raymond0710: 可隱藏實作部分在.c中 避免重複定義可要用#define保 03/26 19:08
10F:→ Raymond0710: 護機制 03/26 19:08