22.类对象和类指针
分析:
定義類對象基本格式是:Student a;在定義之后就已經(jīng)為a這個對象分配了內存,且為內存棧;
定義類指針基本格式是:Student *b = new Student();在定義*b的時候并沒有分配內存,只有執(zhí)行new后才會分配內存,且為內存堆。
問題:
(1)類對象和類指針區(qū)別
A:? 定義
——類對象:利用類的構造函數(shù)(構造函數(shù):對類進行初始化工作)在內存中分配一塊區(qū)域(包括一些成員變量賦值);
——類指針:是一個內存地址值,指向內存中存放的類對象(包括一些成員變量賦值;類指針可以指向多個不同的對象,這就是多態(tài));
B:? 使用
——引用成員:對象使用“.”操作符,指針用“->”操作符;
——生命周期:若是成員變量,則由類的析構函數(shù)來釋放空間;若是函數(shù)中臨時變量,則作用域是函數(shù)體內;而指針則需要利用delete在相應的地方釋放分配的內存塊。
注意:new與delete成對存在!!!
C:? 存儲位置
——類對象:用的是內存棧,是個局部的臨時變量;
——類指針:用的是內存堆,是個永久變量,除非你釋放它。
D: ? 多態(tài)
——指針可以實現(xiàn)多態(tài),直接用對象不行。
F:? 訪問方式
——指針變量是間接訪問,但可實現(xiàn)多態(tài)(通過父類指針可調用子類對象),并且沒有調用構造函數(shù);
——直接聲明可直接訪問,但不能實現(xiàn)多態(tài),聲明即調用了構造函數(shù)(已分配了內存)。
?
(2)類對象和類指針聯(lián)系
——在類的聲明尚未完成的情況下,可以聲明指向該類的指針,但是不可聲明該類的對象;
——父類的指針可以指向子類的對象。
?
(3)指針與多態(tài)
——有前面可知:類指針是一個指向內存中存放類對象的內存地址值,那么這個指針可以指向多個不同的對象,這就是多態(tài);
拓展:指針與虛函數(shù)
——要發(fā)揮虛函數(shù)的強大作用,必須使用指針來訪問對象。
——當類是有虛函數(shù)的基類,Func是它的一個虛函數(shù),則調用Func時:
????????類對象:調用的是它自己的Func;
????????類指針:調用的是分配給它空間時那種類的Func。
?
(4)什么情況使用類對象與類指針?
?
——其實作用基本一樣 都是為了調用類的成員變量和成員函數(shù)用的;
——當你希望明確使用這個類的時候,最好使用對象;
????????如果你希望使用C++中的動態(tài)綁定,則最好使用指針或者引用,指針和引用用起來更靈活,容易實現(xiàn)多態(tài)等。
?
(5)指針好處
——第一,實現(xiàn)多態(tài)。
——第二,在函數(shù)調用,傳指針參數(shù)。不管你的對象或結構參數(shù)多么龐大,你用指針,傳過去的就是4個字節(jié)。如果用對象,參數(shù)?? 傳遞占用的資源就太大了。
總結
以上是生活随笔為你收集整理的22.类对象和类指针的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 21.C 语言与 C++在内存分配有什么
- 下一篇: REGULAR NOMINATION