【轉】對C++類的對象和類的指針的理解

以下程序: 

#include <iostream> 
#include <string> 
using namespace std; 

class Student 

public: 
static int number;  
string name; 

public: 
Student() 



void set(string str) 

name = str; 
number++;    // 調用靜態數據成員 


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

std::cout < < name < <" : The number of the students is " < < number < < " numbers." < < std::endl; // 調用靜態數據成員 

}; 

int Student::number = 0;  // 靜態數據成員初始化 

int main(int argc, char** argv) 


Student* s1; 
s1 = new Student(); 
s1->set("111"); 

Student s2; 
s2.set("222"); 

s1->print(); 
s2.print(); 

return 0; 


對於類student ,定義了一個對象 和一個指針。ios

類的指針:他是一個內存地址值,他指向內存中存放的類對象(包括一些成員變量所賦的值).   
對象,他是利用類的構造函數在內存中分配一塊內存(包括一些成員變量所賦的值).   
          在應用時:   
        1.引用成員:   對象用"   .   "操做符;   指針用"   ->   "操做符.   
        2.生命期:     如果成員變量,則是類的析構函數來釋放空間;如果函數中的臨時變量,則做用域是該函數體內.而指針,則需利用delete   在相應的地方釋放分配的內存塊.   
  注意:用new   ,必定要delete..函數

類的對象:用的是內存棧,是個局部的臨時變量.   
  類的指針:用的是內存堆,是個永久變量,除非你釋放它.   
    
  當類是有虛函數的基類,Func是它的一個虛函數,則調用Func時:   
  類的對象:調用的是它本身的Func;   
  類的指針:調用的是分配給它空間時那種類的Func;  spa

對於一個類的對象和這個類的指針(用new運算符分配內存)在應用時有何區別   
  1.類和對象是兩回事,對象是類的實例;   
  2.對象是在棧中分配的,使用new生成的對象是在堆中分配的;   
  3.要發揮虛函數的強大做用,必須使用指針來訪問對象.  指針

指針能夠實現多態,直接用對象不行 
執行定義對象,在棧空間 
new處的在堆對象

注意名字的類型.內存

一個是Student 
一個是Student*資源

Student是直接訪問一個對象 
Student*是間接訪問一個對象,由於經過了一個指針做媒介.作用域

類型決定了你能作什麼.string

其實做用基本同樣 都是爲了調用類的成員變量 和成員函數用的 
當你但願明確使用這個類的時候,最好使用對象,若是你但願使用C++中的動態綁定,則最好使用指針或者引用 
指針和引用用起來更靈活,容易實現多態等 io


類的指針:他是一個內存地址值,他指向內存中存放的類對象(包括一些成員變量所賦的值).  
對象,他是利用類的構造函數在內存中分配一塊內存(包括一些成員變量所賦的值).  
在應用時:  
1.引用成員:  對象用"  .  "操做符;  指針用"  ->  "操做符.  
2.生命期:    如果成員變量,則是類的析構函數來釋放空間;如果函數中的臨時變量,則做用域是該函數體內.而指針,則需利用delete  在相應的地方釋放分配的內存塊.  
注意:用new 必定要delete.. 
當類是有虛函數的基類,f是它的一個虛函數,則調用f時:  
類的對象:調用的是它本身的f;  
類的指針:調用的是分配給它空間時那種類的f; 

1.在類的聲明還沒有完成的狀況下,能夠聲明指向該類的指針,可是不可聲明該類的對象... 
2.父類的指針能夠指向子類的對象..

定義對象實例時,分配了內存。指針變量則未分配類對象所需內存

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

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

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

相關文章
相關標籤/搜索