2012-04-10 38 views
0

如果我有以下幾個基本的C++程序:如何在C++中打印對象的地址?

#include <iostream> 
using namespace std; 

class CRectangle { 
    int x, y; 
    public: 
    void set_values (int,int); 
    int area() {return (x*y);} 
}; 

void CRectangle::set_values (int a, int b) { 
    x = a; 
    y = b; 
} 

int main() { 
    CRectangle rect; 
    rect.set_values (3,4); 
    cout << "area: " << rect.area() <<endl; 
    cout <<&rect<<endl; 
    cin.get(); 
    return 0; 
} 

是最後一個print語句打印變量RECT的地址或對象的地址?他們是一樣的嗎?或者它們是相同的?

+0

你的問題沒有意義。只有一個對象,它的名字是'rect'。當然他們是一樣的。 – 2012-04-10 15:22:05

+4

如果我知道他們是一樣的,爲什麼我會問這個問題? – gibsonfirebird12 2012-04-10 15:23:15

+0

不要使用'cin.get();'來保持死的程序存活。 – 2012-04-10 15:45:43

回答

5

它們是一樣的。它將打印與對象地址相同的rect地址。 Rect在棧上,因此整個對象也是如此。

0

變量rectCRectablge的對象,所以在這種情況下變量的地址和對象之間沒有區別。

3

沒有這樣的事情作爲一個類的地址,如果這就是你的意思? & CRectangle不存在,只存在該類的一個實例的地址(& rect)。 Class定義本身沒有佔用內存。

+0

第一個聲明是真實的,但如果該類具有虛擬成員,則該類定義將需要存儲在靜態內存中的vtable。如果班級中存在靜態成員,則會發生同樣的情況。 – user877329 2013-09-15 09:28:39

0

rect只是堆棧中對象的標識符。在這種情況下,CRectangle的實例。

通過調用&rect,您將獲得對象所在的堆棧中的地址。