반응형
<객체 포인터>
동일 클래스의 객체 주소를 저장합니다.
객체 포인터의 멤버 참조 연산자는 -> 입니다. (구조체와 동일)
클래스이름 객체;
클래스이름 *객체포인터;
객체포인터 = &객체;
객체포인터 -> 멤버;
이렇게 생성할 수도 있고, (정적 객체)
객체포인터 = new 클래스이름;
객체포인터 -> 멤버;
delete(객체포인터);
new 키워드를 사용해서 객체를 만들고 반환된 주소를 포인터 객체에 저장하는 방법도 있습니다. (동적 객체)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include <iostream> using namespace std; class CopyObj { public: CopyObj(const double h, const double w); ~CopyObj(); void showVar(); private: double height; double weight; }; CopyObj::CopyObj(const double h, const double w) { height = h; weight = w; } CopyObj::~CopyObj() { cout << "***** 객체 소멸 *****" << endl; } void CopyObj::showVar() { cout << "키 : " << height << endl; cout << "몸무게 : " << weight << endl; } int main(){ CopyObj p1(181.5, 79.3); //객체 생성 p1.showVar(); cout << "************************" << endl; CopyObj *p2; p2 = &p1; p2 -> showVar(); return 0; } | cs |
보시면 객체를 만든 뒤 객체 포인터를 만들고, 객체의 주소를 객체 포인터에 저장했습니다.
그리고 객체 포인터를 이용해서 showVar() 함수를 호출했습니다.
객체 포인터는 객체를 가리키는 포인터이기 때문에 소멸자는 p1 객체가 소멸될 때 한 번 호출됩니다. p2는 객체가 아니기 때문에 소멸되지 않습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include <iostream> using namespace std; class CopyObj { public: CopyObj(const double h, const double w); ~CopyObj(); void showVar(); private: double height; double weight; }; CopyObj::CopyObj(const double h, const double w) { height = h; weight = w; } CopyObj::~CopyObj() { cout << "***** 객체 소멸 *****" << endl; } void CopyObj::showVar() { cout << "키 : " << height << endl; cout << "몸무게 : " << weight << endl; } int main(){ CopyObj *p1 = new CopyObj(189.8, 80.2); p1->showVar(); delete(p1); return 0; } | cs |
동적 객체를 만들고 그걸 p1 객체 포인터가 가리키고 있습니다.
함수가 잘 호출된 것을 확인할 수 있고, delete를 할 때 객체가 소멸되는 것을 확인할 수 있습니다.
반응형
'Programming > C++' 카테고리의 다른 글
[C++] string 클래스 (0) | 2018.01.22 |
---|---|
[C++] this (0) | 2018.01.22 |
[C++] 소멸자 (0) | 2018.01.22 |
[C++] 생성자 (0) | 2018.01.22 |
[C++] 클래스와 객체 (2) | 2018.01.22 |