C++中類對象和類指針的區別聯繫(清晰條理,看完之後對這兩者的理解會更加清晰)

【代碼實例】

Student a; //實例化一個類對象a
s.setName("A");
 
//Studeng *b = new Student();
Student *b; //實例化一個類指針b
b = new Student();
b->setName("B");

代碼分析:

定義類對象基本格式是:Student a;在定義之後就已經爲a這個對象分配了內存,且爲內存棧;

定義類指針基本格式是:Student *b = new Student();在定義*b的時候並沒有分配內存,只有執行new後纔會分配內存,且爲內存堆。


【二者的區別和聯繫】

一、類對象和類指針區別

1. 定義

——類對象:利用類的構造函數(構造函數:對類進行初始化工作)在內存中分配一塊區域(包括一些成員變量賦值);

——類指針:是一個內存地址值,指向內存中存放的類對象(包括一些成員變量賦值;類指針可以指向多個不同的對象,這就是多態);

2.使用(大程序用new,小程序直接申請類對象)

——引用成員:對象使用“.”操作符,指針用“->”操作符;

——生命週期:若是成員變量,則由類的析構函數來釋放空間;若是函數中臨時變量,則作用域是函數體內;而指針則需要利用delete在相應的地方釋放分配的內存塊。

注意:new與delete成對存在!!!

3.存儲位置

——類對象:用的是內存棧,是個局部的臨時變量;
——類指針:用的是內存堆,是個永久變量,除非你釋放它。

4.多態

——指針可以實現多態,直接用對象不行。

5.訪問方式

——指針變量是間接訪問,但可實現多態(通過父類指針可調用子類對象),並且沒有調用構造函數;
——直接聲明可直接訪問,但不能實現多態,聲明即調用了構造函數(已分配了內存)。

 

二、什麼情況使用類對象與類指針?

——其實作用基本一樣 都是爲了調用類的成員變量和成員函數;
——當你希望明確使用這個類的時候,最好使用對象;

        如果你希望使用C++中的動態綁定,則最好使用指針或者引用,指針和引用用起來更靈活,容易實現多態等。

三、類對象和類指針聯繫

——在類的聲明尚未完成的情況下,可以聲明指向該類的指針,但是不可聲明該類的對象;
——父類的指針可以指向子類的對象。

四、指針與多態

——有前面可知:類指針是一個指向內存中存放類對象的內存地址值,那麼這個指針可以指向多個不同的對象,這就是多態;

拓展:指針與虛函數
——要發揮虛函數的強大作用,必須使用指針來訪問對象。

——當類是有虛函數的基類,Func是它的一個虛函數,則調用Func時:
        類對象:調用的是它自己的Func;
        類指針:調用的是分配給它空間時那種類的Func。

五、指針的好處

 
——第一,實現多態。
——第二,在函數調用,傳指針參數。不管你的對象或結構參數多麼龐大,你用指針,傳過去的就是4個字節。如果用對象,參數   傳遞佔用的資源就太大了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章