声明 与 定义 (vc)

函数的声明与定义应该很好区分,有函数头,定义也叫实现吧。

今天忽然感觉生命与定义要好好想想,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是编译时分配空间的 推荐一下肖舸的《内存》这篇文章 很深刻

posted on 2009-11-13 16:49  Evalon  阅读(365)  评论(0编辑  收藏  举报

导航