函数的声明与定义应该很好区分,有函数头,定义也叫实现吧。
今天忽然感觉生命与定义要好好想想,vc中与c#应该略有不同。
C#中的变量声明,如在一个class A中,int i;那么就只是声明,那么赋值才叫定义? 那么class声明对象后l例如A a;也不叫定义,还是声明,必须new(c#里面new的含义与cpp相差好远 --)之后a=new A();,i才会产生定义吧?那么如此说来,int i的时候即使赋值也只算声明吧?声明的同时有默认值?那么所在class new之后才会产生真正定义吧,也就是只有用的时候才会分配内存?我不知道真相是不是这样,记得我的老师是这样告诉我的。
现在学习VC,发现略有不同。先不说Cpp不一定全包在class中,但是使用的时候一旦有int i;,貌似就会加载进内存,就是定义了。头文件除外,头文件中的肯定是声明,在所在class产生对象的时候才会产生定义。不知道我表述得清楚不清楚--#
在网上看到的例子说得好,但是我觉得class AAAA; 你得看放在哪里,放在头文件叫声明,如果放在一个在使用的类中应该就是定义了,当然,定义之前你得先有声明(可以不实现么?)。
class AAAA; //这是声明
class AAAA //这是定义
{
};
AAAA aaaa; //这是定义
AAAA * aaaa; //这也是定义
int max(int a, int b); //这是声明
int max(int a, int b)
{
return ..;
}//这又是定义。
那头文件中的变量声明貌似很全局,那么和static比较呢?很简单,还是用上面的class A 和int i,int i在ClassA中声明,不加static,那么A a和A b的i成员是不同的,如果加了static那么a和b中的i应该是同一个。感觉在头文件声明的变量很有"成员的感觉",用来做数据存储很方便,而在cpp文件中的变量定义(貌似只能定义 不算方法参数) 使用起来要注意安排了。一般如果是外来类型如系统的CFile可以放在cpp中,而自己本身的变量放在头文件的好,这个可能需要具体体会,这是我最近的体会。
不过到这里我又晕了 能从分配内存的角度说声明定义么?那应该从哪个角度说呢?原理性基础知识踏实的童鞋们,看到的话帮忙解析一下
发现个错误 static是编译时分配空间的 推荐一下肖舸的《内存》这篇文章 很深刻