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; // 2extern且初始化



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值