声明与定义在很多地方也可以表现为声明与实现 比如在vs2003开发环境中的右键菜
单中有两个选项, "转到定义" 和 "转到声明", 通过这两个菜单明显就可以看到他们的区别
, 声明就是表明在这个程序中存在这样的变量或者函数, 定义就是变量或者函数的具体内容
, 可以给变量符初值等.区分它们.
类的成员声明与定义. 它们可以一次进行.如
class cls
{
cls(){};
~cls(){};
int a, b;
void init(){a = 1, b = 0}; //同时声明与定义
};
声明与定义也可以分着来:
class cls
{
cls(){};
~cls(){};
int a, b;
void init(); //声明
};
void cls::init(){a = 1, b = 0};//定义
如果函数与变量不属于某个类而是全局的。假设有变量int i, 与函数void test();则两
者的声明与定义为:
声明: extern int i;
extern void test()或void test();
定义: int i;
void test(){};
在下面三中情况下。
1, 只有声明没有定义.如果没有被调用则编译连接都可以通过,如果被调用了则出现连接错
误,因为编译器找不到变量或函数的实体。
2, 只有定义没有声明部分, 则变量与定义只能在本cpp文件中使用.
3, 两者都有,则变量与函数都可以被任一包含该头文件的cpp文件使用。
总结:
1. 声明与定义也可以一步做到如:extern int i = 0;
2. 也就是说需要使用一个变量或者函数那它一定要被定义到,否则会产生连接错误。
3. 如果两个cpp文件同时include一个定义如int i;则会出现重复定义的连接错误。用
extern int i;可以解决问题.
4. 声明时,不给程序分配空间,只有定义后才分配空间。
5.在头文件中,最好只用声明,不用定义。在cpp文件中去定义。