About C++ – “포인터 객체, 화살표(‘->’ 간접참조연산자) 연산자, 직접참조연산자란?”

About C++ – “포인터 객체, 화살표(‘->’ 간접참조연산자) 연산자, 직접참조연산자란?”

11월 13, 2021

포인터 복습

#include <iostream>
int main(void) {
  int x = 100; // 정수형 변수 x를 선언하고, 100을 대입했습니다.
  int y; // 정수형 변수 y를 선언했습니다.

  int *PointerX; // 포인터형 변수 PointerX를 선언했습니다.
  PointerX = &x; // PointerX 안에 X의 주소를 대입했습니다.
  y=*PointerX; // 참조 연산자(*)를 사용하여 포인터의 주소로 가서 값을 가져왔습니다.

  std::cout << y;

  return 0;
}

포인터를 간단히 https://www.gdsanadevlog.com/668 에 정리해두었습니다. 위의 코드를 이해하시기는 어렵지 않을 것입니다.

포인터 객체로 알아보는 직접참조연산자, 간접참조연산자란?

클래스에서도 포인터 객체를 만들 수 있습니다. 위의 코드에서 int형의 포인터객체 PointerX를 만든 것과 같은 맥락입니다.

#include <iostream>
using std::cout;

class Fish{
  private:
    float length;
  public:
    float getLength(){return length;}
    void setLength(float a){length = a;}
};

Fish클래스 정의부분인데, 위의 코드는 전혀 이해하기 어렵지 않을 것입니다.

main함수를 자세히 살펴보겠습니다.

int main()
{
  Fish discus, *pdiscus;
  pdiscus = &discus;

  discus.setLength(15.3452);
  //  cout<<discus.getLength(); 이면,
  // error: member reference type 'Fish' is not a
  // pointer; did you mean to use '.'?
  // 포인터 객체가 아니므로 '.' 직접참조연산자를 사용해야 한다는 오류 메시지가 나옵니다.
  cout<<discus.getLength();

  cout<<"\n";

  pdiscus->setLength(11.5);
  //pdiscus.setLength(11.5); 이면,
  //error: member reference type 'Fish *' is a pointer;
  //did you mean to use '->'?
  //포인터 객체이므로 '->' 간접참조연산자를 사용해야 한다는 오류 메시지가 나옵니다..
  cout<<pdiscus->getLength();

  return 0;
}

Fish클래스의 일반객체인 discus와 포인터객체 pdiscus를 만들었습니다. 다음 줄에서, 주소값을 저장할 수 있는 포인터객체인 pdiscus에 discus의 주소값을 대입한 것을 알 수 있습니다.

discus.setLength(15.3452); 는 직접참조연산자인 ‘.’를 이용한 예시입니다. 일반객체인 discus가 멤버에 접근하기 위해서 직접참조연산자를 사용한 것을 볼 수 있습니다. 다음줄인 cout<<discus.getLength(); 에서도 직접참조연산자를 사용한 것을 확인할 수 있습니다.

이번엔 pdiscus->setLength(11.5);의 경우를 살펴봅니다. pdiscus는 포인터 객체이므로 간접참조연산자인 ‘->’를 사용하여 멤버에 접근한 것입니다. 당연히 다음줄에서도 포인터객체가 멤버에 접근하기 위해서 간접참조연산자를 사용한 것을 알 수 있겠습니다.

간접참조연산자( ‘->’ ) vs 직접참조연산자( ‘.’ )

  • 간접참조연산자는 포인터 객체가 멤버에 접근하기 위해 사용합니다.
  • 직접참조연산자는 일반 객체가 멤버에 접근하기 위해 사용합니다.

Avada Programmer

Hello! We are a group of skilled developers and programmers.

Hello! We are a group of skilled developers and programmers.

We have experience in working with different platforms, systems, and devices to create products that are compatible and accessible.