C++對象數組與對象指針


(一)對象數組

  將具有相同類類型的對象有序地集合在一起便構成了對象數組,以一維對象數組為例,其定義形式為:
  類名 對象數組名[];
  Point points[100];

  關於對象數組的幾點說明:

  (1)在建立對象數組的時候需要調用構造函數。如果對象數組有100個元素,就需要調用100次構造函數。

  (2)如果對象數組所屬類有帶參數的構造函數時,可用初始化列表按順序調用構造函數,使用復制初始化來初始化每個數組元素。

  Point A[3]={Point(0,0),Point(1,1),Point(2,2)};    //Point(int a=0,int b=0)

  Point A[3]={Point(1),Point(2),Point(3)};             //Point(int a=0,int b=0)

  (3)如果對象數組所屬類有單個參數的構造函數時候,定義數組時可以直接在初值列表中提供實參。

  Point A[3] ={1,2,3};    //Point(int a=0,int b=0)

  等價與:

  Point A[3]={Point(1),Point(2),Point(3)};

  (4)如果對象數組在創建時沒有初始化,則所屬類要么有合成默認構造函數,要么定義無參數的構造函數或全部參數為默認參數的構造函數。

  (5)對象數組的初始化形式本質上取決於所屬類的構造函數,需要清晰初始化實參與構造函數形參的對應關系,避免出現歧義性。

  (6)如果對象數組所屬類含有析構函數,那么每當建立對象數組時,按照每個元素的排列順序調用構造函數;每當撤銷數組時,按照相反的順序調用析構函數。

(二)對象指針

  1)指向對象的指針

  在建立對象時,編譯器會為每一個對象分配一定的存儲空間,以存放其成員。對象內存單元的起始位置地址就是對象的指針。可以定義一個指針變量,用來存放對象的指針。指向類對象的指針變量的定義形式為:

  類名* 對象指針變量名=初值;

  例子:
  Point one(0,0),*p;     //p為指向對象的指針變量

  p=&one;                   //指向對象

  2)類成員指針

  成員對象要占用存儲空間,因此也有地址。指向對象成員的指針變量,一般形式為:

  數據成員類型* 指針變量名=初值;

  注意,C++比C語言有着更加嚴格的靜態類型,更加強調類型安全與編譯時檢查。因此,C++指針被分為數據指針,函數指針,數據成員指針,成員函數指針四種,而且不能隨意轉換。其中前兩種是C語言的稱為普通指針;后兩種是C++專門為類擴展的,稱為成員指針。

  成員指針與類的類型和成員的類型相關,它只應用於類的非靜態成員。由於靜態成員不是任何對象的組成部分,所以靜態成員指針可用普通指針。

  a)數據成員指針

  數據成員類型是 類名::*指針變量名=成員地址初值;

  b)成員函數指針

  定義成員函數指針時必須確保在三個方面與它所指函數的類型相匹配:

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM