2012-04-10 3 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; 
} 

является последним оператором печати печати адреса переменной прямоугольнику или адреса объекта? они одинаковы? или они одинаковы?

+0

Ваш вопрос не имеет смысла. Существует только один объект, и его имя «rect». Конечно, они одинаковы. –

+4

Если бы я знал, что они такие же, почему я задал вопрос? – gibsonfirebird12

+0

Не используйте 'cin.get();' для сохранения мертвой программы. –

ответ

5

Они такие же. Он печатает адрес rect, который совпадает с адресом объекта. Rect находится в стеке, и, следовательно, весь объект тоже.

0

Переменная rect является объектом CRectablge, поэтому в этом случае нет разницы между адресом переменной и объектом.

3

Нет такой вещи, как адрес класса, если это то, что вы имеете в виду? & CRectangle не существует, только адрес экземпляра класса (& rect) существует. Никакая память не занята самим определением класса.

+0

Первое утверждение верно, но если класс имеет виртуальных членов, определение класса потребует vtable, хранящегося в статической памяти. То же самое происходит, если в классе есть статические члены. – user877329

0

rect - это всего лишь идентификатор объекта в стеке. В этом случае экземпляр CRectangle.

Позвонив по номеру &rect, вы получите адрес в стеке, где находится объект.

Смежные вопросы