在進行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且初始化