類的物件和類的指標的區別

2021-06-27 02:53:33 字數 2061 閱讀 5552

在做程式時發現類的物件和類的指標的生命期不同,進而想深入了解二者有什麼區別

如下程式:

#include

#include

using namespace std;

class student

void set(string str)

void print()  // 態成員函式 print()

}; int student::number = 0;  // 靜態資料成員初始化

int main(int argc, char** argv)

對於類student ,定義了乙個物件 和乙個指標。

類的指標:他是乙個記憶體位址值,他指向記憶體中存放的類物件(包括一些成員變數所賦的值).  

物件,他是利用類的建構函式在記憶體中分配一塊記憶體(包括一些成員變數所賦的值).  

在應用時:  

1.引用成員:   物件用"   .   "操作符;   指標用"   ->   "操作符.  

2.生命期:     若是成員變數,則是類的析構函式來釋放空間;若是函式中的臨時變數,則作用域是該函式體內.而指標,則需利用delete   在相應的地方釋放分配的記憶體塊.  

注意:用new   ,一定要delete..

類的物件:用的是記憶體棧,是個區域性的臨時變數.  

類的指標:用的是記憶體堆,是個永久變數,除非你釋放它.  

當類是有虛函式的基類,func是它的乙個虛函式,則呼叫func時:  

類的物件:呼叫的是它自己的func;  

類的指標:呼叫的是分配給它空間時那種類的func;  

對於乙個類的物件和這個類的指標(用new運算子分配記憶體)在應用時有何區別  

1.類和物件是兩回事,物件是類的例項;  

2.物件是在棧中分配的,使用new生成的物件是在堆中分配的;  

3.要發揮虛函式的強大作用,必須使用指標來訪問物件.  

指標可以實現多型,直接用物件不行

執行定義物件,在棧空間

new處的在堆

注意名字的型別.

乙個是student

乙個是student*

student是直接訪問乙個物件

student*是間接訪問乙個物件,因為通過了乙個指標作媒介.

型別決定了你能做什麼.

其實作用基本一樣 都是為了呼叫類的成員變數 和成員函式用的

當你希望明確使用這個類的時候,最好使用物件,如果你希望使用c++中的動態繫結,則最好使用指標或者引用

指標和引用用起來更靈活,容易實現多型等 

類的指標:他是乙個記憶體位址值,他指向記憶體中存放的類物件(包括一些成員變數所賦的值). 

物件,他是利用類的建構函式在記憶體中分配一塊記憶體(包括一些成員變數所賦的值). 

在應用時: 

1.引用成員:  物件用"  .  "操作符;  指標用"  ->  "操作符. 

2.生命期:    若是成員變數,則是類的析構函式來釋放空間;若是函式中的臨時變數,則作用域是該函式體內.而指標,則需利用delete  在相應的地方釋放分配的記憶體塊. 

注意:用new 一定要delete..

當類是有虛函式的基類,f是它的乙個虛函式,則呼叫f時: 

類的物件:呼叫的是它自己的f; 

類的指標:呼叫的是分配給它空間時那種類的f; 

1.在類的宣告尚未完成的情況下,可以宣告指向該類的指標,但是不可宣告該類的物件...

2.父類的指標可以指向子類的物件..

定義物件例項時,分配了記憶體。指標變數則未分配類物件所需記憶體

指標變數是間接訪問,但可實現多型(通過父類指標可呼叫子類物件),並且沒有呼叫建構函式。

直接宣告可直接訪問,但不能實現多型,宣告即呼叫了建構函式(已分配了記憶體)。

至於那個效率高要看程式呼叫過程而定。

c++的精髓之一就是多型性,只有指標或者引用可以達到多型。物件不行

用指標:

第一實現多型。

第二,在函式呼叫,傳指標引數。不管你的物件或結構引數多麼龐大,你用指標,傳過去的就是4個位元組。如果用物件,引數傳遞占用的資源就太大了

類物件和類指標的區別

對於類ctest 宣告 類物件ctest c1 利用類的建構函式在記憶體中分配一塊記憶體,呼叫了建構函式 類指標ctest pc1 是乙個記憶體位址值,指向記憶體中存放的類物件,沒有呼叫建構函式 引用成員 物件用 指標用 物件生命期 若是成員變數,則是類的析構函式來釋放空間 若是函式中的臨時變數,則...

類指標和類物件的區別

如下程式 include include using namespace std class student void set string str void print 態成員函式 print int student number 0 靜態資料成員初始化 int main int argc,cha...

類物件和類指標的區別

如下程式 include include using namespace std class student voidset string str void print 態成員函式 print int student number 0 靜態資料成員初始化 int main int argc,char...