본문 바로가기

공부/C++

This 포인터란?

this포인터란 

정의 [멤버함수 내에서 자기자신을 가리키는  포인터 이다.]

아래의 예제를 보자.



#include <iostream>
using namespace std;

class WhoAmI
{
public:
int id;

WhoAmI(int id_arg);
void ShowYourself() const;
};

WhoAmI:: WhoAmI(int id_arg)
{
id = id_arg;
}

void WhoAmI::ShowYourself() const
{
cout << "{ID = " << id <<", this = " << this <<"}\n"; // this 포인터에 보관한 값을 출력한다.
}


int main()
{
WhoAmI obj1( 1); //구조체 정의(인수를 넣어서 멤버함수를 사용하게 함.
WhoAmI obj2( 2); //각각 1 2 3 의 id값을 가지고 
WhoAmI obj3( 3);

obj1.ShowYourself(); //여기에서 멤버함수를 다시 사용하여 this 값을 출력하게 함.
obj2.ShowYourself();
obj3.ShowYourself();

cout << "&obj1 = " << &obj1 << "\n"; //마지막으로 주소값을 출력하는 코드.
cout << "&obj2 = " << &obj2 << "\n";
cout << "&obj3 = " << &obj3 << "\n";



system("pause");

return 0;

}

==========================

==========================


주석에 다 써놨다.

에잉.. 뭐 설명할게 없네

말 그대로 this   포인터 란 자기자신의 주소값을 가리키고 있음을 위 출력화면에서 알 수 있음.

또한 이 this포인터는 정적 멤버 함수에는 사용할수 없음.

마지막으로 이 this 포인터로 이름 충돌을 해결할 수 있다는데. 솔직히 말해서 왜 굳이 이리 헷갈리도록 코딩을 하는지는 이유를 모르겠으나

가능하다고 하여 그 예제 코드를 적어둠.

=============================

#include <iostream>
using namespace std;

class WhoAmI
{
public:
int id;

WhoAmI(int id);
void ShowYourself() const;
};

WhoAmI:: WhoAmI(int id)
{
this->id = id; // 이렇게 왼쪽에는 멤버변수 id를 의미하고
                          //오른쪽의 값은 매개변수 id를 의미하는 코드를 사용할 수 있다.
}

void WhoAmI::ShowYourself() const
{
cout << "{ID = " << id <<", this = " << this <<"}\n"; // this 포인터에 보관한 값을 출력한다.
}

int main()
{
WhoAmI obj1( 1); //구조체 정의(인수를 넣어서 멤버함수를 사용하게 함)
WhoAmI obj2( 2); //각각 1 2 3 의 id값을 가지고 
WhoAmI obj3( 3);

obj1.ShowYourself(); //여기에서 멤버함수를 다시 사용하여 this 값을 출력하게 함.
obj2.ShowYourself();
obj3.ShowYourself();
cout << "&obj1 = " << &obj1 << "\n"; //마지막으로 주소값을 출력하는 코드.
cout << "&obj2 = " << &obj2 << "\n";
cout << "&obj3 = " << &obj3 << "\n";
system("pause");

return 0;

}



위와 내부 코드만 바뀐 것으로 지칭하는것이 모두 같아 출력값은 같게 나온다.

'공부 > C++' 카테고리의 다른 글

C++ 객체지향 프로그래밍 Chapter 21 클래스와 객체  (0) 2011.12.15
Visual Studio 2008 줄 번호 표시 방법  (0) 2011.12.06
포인터의 덧셈을 사용한 배열의 탐색  (0) 2011.11.25
const 와 포인터.  (0) 2011.11.25
0과 NULL  (0) 2011.11.25