C++ 類知識點

  1. member function definitions are processed after the compiler processes all of the declarations in the class;ios

  2. our only chance to initialize const or reference data members is in the constructor initializer , also a class type that doesnot have a default constructor.函數

  3. 聚合類的概念 aggregate classes ,這裏class的概念包含struct和union:this

    a) 聚合類的全部成員數據都是public的;spa

    b) 聚合類不定義任何構造函數;.net

    c) 聚合類沒有類內初始化;指針

    d) 聚合類沒有基類或虛函數;htm

    C語言中的大部分結構體均可以看作是聚合類。對象

  4. literal class :it

    a) 數據成員均是常量的聚合類被稱爲literal classio

    b) 非聚合類只要知足以下條件也是literal class:

      數據成員都是常量類型;

      類必須至少有一個constexpr 構造器;

      必須使用類的默認的析構函數;

      若是數據成員有初始化器,此內置數據類型的初始化器必須是一個常量表達式;或者是成員是一個類,初始化器必須是成員函數本身的 constexpr 構造器;

  5. constexpr constructor

  6. 類的靜態成員

    a) 靜態成員不可在類體內進行賦值,由於它是被全部該類的對象所共享的。你在一個對象裏給它賦值,其餘對象裏的該成員也會發生變化。爲了不混亂,因此不可在類體內進行賦值;

    b) 當將類的某個數據成員聲明爲static時,該靜態數據成員只能被定義一次,並且要被同類的全部對象共享。各個對象都擁有類中每個普通數據成員的副本,但靜態數據成員只有一個實例存在,與定義了多少類對象               無關。靜態方法就是與該類相關的,是類的一種行爲,而不是與該類的實例對象相關。

    c) 靜態數據成員的用途之一是統計有多少個對象實際存在。

    d) 靜態數據成員不能在類中初始化,實際上類定義只是在描述對象的藍圖,在其中指定初值是不容許的。也不能在類的構造函數中初始化該成員,由於靜態數據成員爲類的各個對象共享,不然每次建立一個類的

    對像則靜態數據成員都要被從新初始化。

    e) 對全部的對象是同樣的。靜態成員能夠被初始化,但只能在類體外進行初始化。 注意:不能用參數初始化表對靜態成員初始化。通常系統缺省初始爲0。

    (1)、static成員的全部者是類自己和對象,可是多有對象擁有同樣的靜態成員。從而在定義對象是不能經過構造函數對其進行初始化。

    (2)、靜態成員不能在類定義裏邊初始化,只能在class body外初始化。

    (3)、靜態成員仍然遵循public,private,protected訪問準則。

    (4)、靜態成員函數沒有this指針,它不能返回非靜態成員,由於除了對象會調用它外,類自己也能夠調用。
#include "iostream"
using namespace std;
class test
{
private:
     int x;
     int y;
public:
     static int num;
     static int Getnum()
     {
          x+=5;   // 這行代碼是錯誤的,靜態成員函數不能調用非靜態數據成員,要經過類的對象來調用。
          num+=15;
          return num;
     }
};
int test::num = 10;
int main(void)
{
     test a;
     cout<<test::num<<endl;        //10
     test::num = 20;
     cout<<test::num<<endl;        //20
     cout<<test::Getnum()<<endl;   //35
     cout<<a.Getnum()<<endl;       //50
     system("pause");
     return 0;
}

關於靜態成員函數,能夠總結爲如下幾點:

出如今類體外的函數定義不能指定關鍵字static;

靜態成員之間能夠相互訪問,包括靜態成員函數訪問靜態數據成員和訪問靜態成員函數;

非靜態成員函數能夠任意地訪問靜態成員函數和靜態數據成員;

靜態成員函數不能訪問非靜態成員函數和非靜態數據成員;

因爲沒有this指針的額外開銷,所以靜態成員函數與類的全局函數相比速度上會有少量的增加;

調用靜態成員函數,能夠用成員訪問操做符(.)和(->)爲一個類的對象或指向類對象的指針調用靜態成員函數,當同一類的全部對象使用一個量時,對於這個共用的量,能夠用靜態數據成員變量,這個變量對於同一類的全部的對象都取相同的值。靜態成員變量只能被靜態成員函數調用。靜態成員函數也是由同一類中的全部對象共用。只能調用靜態成員變量和靜態成員函數。

 

    引用自: http://www.jb51.net/article/41775.htm

相關文章
相關標籤/搜索