2012-04-10 1362 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,您将获得对象所在的堆栈中的地址。