参考:http://bbs.csdn.net/topics/380194325
C++ primer 58页上说头文件一般包含类的定义、extern变量的声明和函数的声明。
看到网上总结说区别声明和定义就是看是否被分配了内存。既然这样假如我写了下面这个类:
class A { A(); int get()const; int i; }; void main() { ..... }既然类A是一个定义,那在进入main函数之前是否已经为类A分配了内存,但是我记得说只有在类实例化一个对象的时候才会分配内存的啊。这不是矛盾了么。。。。那类的声明又是什么意思?
1、定义类型和实例化对象不是同一个概念,只有类实例化一个对象的时候才会分配内存。
2、对于基本类型变量,“声明不分配内存,定义则会分配内存”。但是这样的说法并不适合类的定义,更确切的讲,定义一个类就是定义一种自己创建的数据类型。
3、
class A { A(); int get()const; int i; };
这是是一个类的定义!
但是!类的定义与基本类型的定义有所区别,编译器仅对其进行语汇分析及名字的决议,并未占用内存!
4、关于头文件包含类定义的说明如下:
类的定义是具有内部链接特性的,即它不是声明,不能在同一编译单元(即不在一个cpp文件中)重复出现,但是它具有内部链接,(所谓内部链接指的是该名称对于所在编译单元是局部的,在链接时不会与其他编译单元中同样的名称产生命名冲突),所以类如果要在单个编译单元之外使用它必须被定义在一个头文件中。 ——详见<<大规模C++程序设计>>