如何区分C++中类的声明和定义

参考: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++程序设计>> 


参考:C++类的声明和对象的定义

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值