728x90
반응형
this 포인터
이해를 위한 메모리주소 찍기
class CTest
{
public:
CTest()
{
//std::cout << "CTests()" << std::endl;
}
~CTest()
{
//std::cout << "~CTests()" << std::endl;
}
void PrintData()
{
std::cout << m_Data << std::endl;
}
protected:
int m_Data = 0;
};
int main(void)
{
CTest a;
std::cout << &a << std::endl;
// a.PrintData();
CTest b;
std::cout << &b << std::endl;
// b.PrintData();
return 0;
}
- 실행시 Instance된 a, b의 주소는 각가 다르게 나온다.
- 그렇다면 a.PrintData()와 b.PrintData()도 다를까?
- class01에서 u.PrintData(&u) 코드를 기억해보자
- a.PrintData(&a) / b.PrintData(&b) 이렇게 넘어갈것이다
this 이해를 돕기위한 추가코드
class CTest
{
public:
CTest()
{
//std::cout << "CTests()" << std::endl;
}
~CTest()
{
//std::cout << "~CTests()" << std::endl;
}
void PrintData()
{
std::cout << this << std::endl;
std::cout << m_Data << std::endl;
std::cout << this->m_Data<<std::endl;
}
protected:
int m_Data = 0;
};
int main(void)
{
CTest a;
std::cout << &a << std::endl;
a.PrintData();
CTest b;
std::cout << &b << std::endl;
b.PrintData();
return 0;
}
- 출력시 a, b의 조소값밑에 같은 주소값이 찍히는데 그게 this 값
- 즉 hidden parameter가 넘어감을 알수있다 (class 01참고)
- this pointer의 값은 자동으로 결정 -> 프로그래머가 개입 X
정적멤버 (static)
- 정적 멤버는 [전역변수, 전역함수] 만드는 방법이라 생각
- 정적 멤버는 Instance와 관련이 없음
- 전역 변수와 함수를 남발하면 객체지향 개념과 상관없는 코드로 변질될 가능성이 커지니 주의
정적 Data(변수)는 동시성 문제를 야기 이는 Multithreading 등의 문제가 생기는데 더 깊은 내용은 운영체제공부!!
728x90
반응형
'C++ 공부' 카테고리의 다른 글
constructor 03 (0) | 2021.08.20 |
---|---|
constructor 02 (0) | 2021.08.20 |
constructor 01 (0) | 2021.08.20 |
class 02 (0) | 2021.08.19 |
class 01 (0) | 2021.08.19 |