this포인터란
정의 [멤버함수 내에서 자기자신을 가리키는 포인터 이다.]
아래의 예제를 보자.
#include <iostream>
정의 [멤버함수 내에서 자기자신을 가리키는 포인터 이다.]
아래의 예제를 보자.
#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 |