C++類的對象和類的指針的區別


 1 #include <iostream> 
 2 #include <string> 
 3 using namespace std; 
 4 class Student 
 5 { 
 6 public: 
 7 static int number;  
 8 string name; 
 9 
10 public: 
11 Student() { } 
12 void set(string str) 
13 { 
14 name = str; 
15 number++;    // 調用靜態數據成員 
16 } 
17 
18 void print()  // 態成員函數 print() 
19 { 
20 std::cout < < name < <" : The number of the students is " < < number < < " numbers." < < std::endl; // 調用靜態數據成員 
21 } 
22 }; 
23 
24 int Student::number = 0;  // 靜態數據成員初始化 
25 
26 int main(int argc, char** argv) 
27 { 
28 Student* s1; 
29 s1 = new Student(); 
30 s1->set("111"); 
31 
32 Student s2; 
33 s2.set("222"); 
34 
35 s1->print(); 
36 s2.print(); 
37 
38 return 0; 
39 } 

對於類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時:
類的對象:調用的是它自己的Func;
類的指針:調用的是分配給它空間時那種類的Func;

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

定義對象實例時,分配了內存。指針變量則未分配類對象所需內存
指針變量是間接訪問,但可實現多態(通過父類指針可調用子類對象),並且沒有調用構造函數。
直接聲明可直接訪問,但不能實現多態,聲明即調用了構造函數(已分配了內存)。
至於那個效率高要看程序調用過程而定。

C++的精髓之一就是多態性,只有指針或者引用可以達到多態。對象不行

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


免責聲明!

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



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