類的對象和類的指標

來源:互聯網
上載者:User

如下程式: 

#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 ,定義了一個對象 和一個指標。

 

類的指標:他是一個記憶體位址值,他指向記憶體中存放的類對象(包括一些成員變數所賦的值).   
對象,他是利用類的建構函式在記憶體中分配一塊記憶體(包括一些成員變數所賦的值).   
          在應用時:   
        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個位元組。如果用對象,參數傳遞佔用的資源就太大了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.