首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++ 宣言和定义辨析

2012-12-20 
C++ 声明和定义辨析在进行c培训时,发现有些概念对于初次接触c的同事可能有点难于理解,所以这里做些总结,一

C++ 声明和定义辨析

在进行c++培训时,发现有些概念对于初次接触c++的同事可能有点难于理解,所以这里做些总结,一方面方便同事阅读,另一方面也是对自己技能的一个总结。


一、声明(declaration):用于向程序表明变量的类型和名字,是用来将一个object、function、class或template的类型和名字告诉编译器。由2部分组成:类型 + 标示符,标示符可以包含字符*、[ ]和(),表明这个名称是类型的指针、数组或者返回类型的函数。

声明并不带有细节信息;定义也是一种声明;extern关键字可用来声明变量而不定义,只是说明变量定义在程序的其他地方;变量可以声明多次,但只能定义一次例子:char *pc; // 类型是pc,标示符是*pc,表明*pc是一个char。
extern float x;  // 对象声明
int func(double num); //函数声明
class Person; //类声明
template<class T>class SmartPointer; //模板声明
解读复杂声明的一种方法,遵循“声明模仿使用”的原则逐步分解声明。例如:char * (*pfpc)();* (*pfpc)(); // 是一个char(*pfpc)();    // 是一个指向char的指针(*pfpc);       // 是一个返回char类型指针的函数pfpc;           // 是一个指向返回char类型指针的函数的指针
二、定义(definition):是用来将细节信息提供给编译器。对于object而言,定义是编译器为它分配内存空间;对于function或funciton template而言,定义是提供函数体;对于class或class template而言,定义是列出该class或template的所有成员;例子:float x; //对象定义
//函数定义int func(double num) {                        int t = static_cast<int>(num);     return t;}
//类定义class Person {public:     Person();     ~Person();
    String getName() const;    void setName(String name);
   ....};
//模板定义template<class T>class SmartPointer {public:    SmartPointer(T *p = 0);    ~SmartPointer();   T * operator->() const;   T& operator*() const;   ...};


备注:如果声明中有初始化,那么它其实是定义。

    例如: externdouble pi = 0;

    此时pi是定义,所以如果这样用的话会出错:

    extern double pi = 0;

    extern double pi = 1; // 2个extern且初始化



热点排行