1 物件陣列
物件陣列是指數組元素為物件的陣列。這種物件陣列與其它資料
型別的陣列定義方式相同。如:
x a[10];
它建立了乙個物件陣列a,有10個陣列元素,每個陣列元素a [i]都是乙個物件,所以,需要10次呼叫建構函式。
c++
語言不允許初始化物件陣列,所以要建立乙個類的物件陣列,這個類必須具備以下三個條件之一:
(1) 沒有建構函式;
(2) 有建構函式,但要有乙個建構函式不帶引數;
(3) 有建構函式,但要有乙個建構函式具有的引數全是預設引數。
2 指向物件的指標
乙個基型別為類型別的指標稱為物件指標,每乙個物件建立之後都會在記憶體中占有一定的儲存空間,物件指標用來存放物件儲存空間的首位址。
說明指向物件的指標的語法與說明指向其他任何資料型別的指標的語法相同。
x *a; //注意不是指向類的指標
a是乙個指向x類物件的指標;這樣,可以用指向物件的指標來訪問物件的成員,格式如下:
物件指標->資料成員
或者
物件指標->成員函式
x obj;
x *p; //宣告指向物件的指針,沒有呼叫建構函式
p=&obj; //將指標p指向
3 指向類成員的指標
這裡需要說的是所有的指標需要位址,但在類內部是沒有位址的,選擇乙個類的成員就是指定這個成員在類中的偏移。只有把這個偏移和具體物件的開始位址相結合,才能得到實際位址。
c++既包含指向類資料成員的指標,又包含指向成員函式的指標。
(1) 指向類資料成員的指標
宣告指向類x中型別為type的資料成員的指標的語法格式為:
type x::*pointer;
若類x的資料成員a的型別為type。則語句:
pointer=&x:: a;
是將該成員的位址存入pointer中。注意,取乙個類成員的位址使用表示式&x:: a。這樣得到的位址不是真實位址,而是成員a在類x中相對於物件起始位址的偏移。因此,若要訪問某個物件中pointer所指向的成員,應使用兩個指向成員的指標(針對類物件和引用的是.*,以及針對指向類物件的指標的是->*)例如:
class a
int func( )
};
對類a可以有如下定義:
int a::* pb; //乙個指向類a的資料成員的指標變數pb
pb=&a:: b; //使指標變數pb指向類a的資料成員b
因為b是類a的公有成員,在程式中才能這樣定義。
由於類是通過物件來例項化的。因此,在使用這類指標時,需要首先指定類a的乙個物件,然後通過物件或者指向物件的指標來訪問類成員指標所指向的成員。例如:
a a;
a *p=&a; //定義類a物件指標p,並指向物件a
a.*pb=2; //為物件a的資料成員賦值2
也可以這樣寫:
p->*pb=2;
(2) 指向成員函式的指標
指向成員函式的指標與指向成員變數的指標工作原理相似,主要的區別是語法更複雜。
int (a::* fp)( );
fp是乙個指向類a成員函式的指標。下面說明如何使用它:
fp=a:: func //fp指向類a的成員函式funca a;
a *p=&a; //定義類a物件指標p,並指向物件a
(a.*fp)( ); //呼叫類a的成員函式func
(p->*fp)( ); //呼叫類a的成員函式func
語句fp=a:: func是將該函式的位址(即它在該類所有物件中的偏移)賦給了指標fp。
物件陣列 物件指標 指向物件的指標
1.物件陣列的每乙個元素都是同類的物件 class student private int score int main 三個實參分別傳給陣列的三個建構函式 return 0 2.當資料成員中含有預設引數時 student int 100,int 80,int 90 含有預設引數時 student ...
指向物件的指標
正常情況下物件一經宣告就為物件的成員分配儲存空間,並呼叫其建構函式進行初始化,物件生存期結束後自動呼叫析構函式,並釋放物件占用的空間。缺點 造成記憶體緊張 解決途徑 先宣告這些物件,在需要這些物件時才分配儲存空間和呼叫建構函式,使用完之後可以立即呼叫析構函式釋放其記憶體空間。這一途徑使用c 語言指向...
指向物件的指標
定義指標 類名 指標變數 例如 myclass p 使指標有指向 指標變數 物件名 通過指標變數完成對指向物件的成員操作 my.x p x 指標變數 資料成員 指標變數 方法名 實參 通過指標變數表示物件 指標變數 includeusing namespace std class myclass m...