본문 바로가기
C++ 공부

class 03

by Dev_Hugh 2021. 8. 20.
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