作者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/cn.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