请教C++中对象或者变量的声明与定义有何不同?

问题描述:

请教C++中对象或者变量的声明与定义有何不同?
在程序的大部分地方我感觉变量的声明语句就是定义语句,虽然知道变量的声明只是告诉编译系统,并不马上分配存储空间,但很多时候仍旧疑惑声明和定义的区别,
对函数的声明和定义,可以很容易区分,但是变量或者对象的声明和定义怎么区分:如
f1.cpp文件:
int a=2;
int main()
{ int b,c=0;
b=c;
f();
return 0;
}
.
f2.cpp文件:
extern int a;
void f()
{ int dd;
dd=8;
}
在上述程序中,两个文件中的全局变量a,其中f1.cpp中的a在声明的同时并定义同时被初始化为2,但f2.cpp中的a只是一个声明,并没有定义(分配存储空间),在这里声明和定义区分的很明显,但f2.cpp中的dd变量,应该是声明的同时也被定义了,好象声明和定义区分的不明显.请教是不是对于auto类型的变量是不是声明和定义都在一起啊?
1个回答 分类:综合 2014-09-24

问题解答:

我来补答
基本类型变量是声明和定义(初始化)是同时产生的
也就是说int a;那么同时对a进行声明和初始化
而对象,是声明与定义分开的
如类A
如果A x;就是一个声明,告诉编译器x是一个A类的对象变量,但是不进行初始化
如果以后,x= new A(); 这就是初始化,分配了空间
同样,A x=new A();这也是声明的同时初始化
还有对于函数(方法):声明只是写出函数的特性(类型 名称 参数),并没有实际的内容,是告诉编译器有这样的一个函数,在定义的时候把函数全部写清楚
已经说了,基本类型变量是声明和定义(初始化)是同时产生的,你的extern int a; 如果是直接这么写的那么就是直接定义和声明,如果是从别的地方extern来得,那么这句话就和声明和定义无关,这样的情况只是说把a扩展成全局来使用,就是实现这个功能,不会重新定义a
 
 
展开全文阅读
剩余:2000
上一页:第九题,详解
下一页:gyyv