반도체/C++

38. C++ 화살표 연산자

Clair_de_Lune 2024. 9. 4. 13:22
728x90

C++에서 화살표 연산자(->)는 포인터가 가리키는 객체의 멤버(변수나 메서드)에 접근할 때 사용됩니다. 이 연산자는 주로 객체 지향 프로그래밍에서 매우 중요한 역할을 하며, 포인터를 사용하여 객체를 다룰 때 편리합니다.

구체적인 설명:

  1. 포인터와 객체:
    • C++에서 객체는 클래스의 인스턴스이며, 객체의 멤버(변수 또는 메서드)에 접근하려면 해당 객체의 이름을 통해 접근할 수 있습니다.
    • 그러나 객체의 주소를 저장하는 포인터를 사용하면, 직접 객체에 접근하는 것이 아니라 포인터를 통해 간접적으로 접근해야 합니다.
  2. 화살표 연산자의 역할:
    • 화살표 연산자는 포인터가 가리키는 객체의 멤버에 접근하는 데 사용됩니다.
    • 예를 들어, Obj라는 클래스의 인스턴스가 있고, 이 인스턴스의 포인터가 pObj라고 할 때:
      pObj->memberFunction(); // pObj가 가리키는 객체의 memberFunction() 메서드를 호출
      
    • 위의 코드에서 ->는 pObj가 가리키는 객체의 memberFunction 메서드를 호출합니다.
  3. 사용 예:
    • 만약 MyClass라는 클래스가 있고, 이 클래스에 myFunction이라는 메서드가 있다면, 포인터를 통해 호출하는 방법은 다음과 같습니다:
      MyClass* ptr = new MyClass(); // MyClass 객체를 동적으로 생성하고 포인터에 저장
      ptr->myFunction(); // ptr이 가리키는 MyClass 객체의 myFunction() 호출
      
  4. 동등한 표현:
    • 화살표 연산자는 점 연산자(.)와 함께 사용되는 포인터와 객체의 관계를 나타냅니다. 포인터를 통해 객체를 가리킬 때는 ->를 사용하고, 객체를 직접 사용할 때는 .를 사용합니다.
    • 위의 예를 다시 표현하자면:
      (*ptr).myFunction(); // 포인터를 역참조한 후 점 연산자로 호출
      
    • 두 표현식은 동일한 결과를 생성하지만, ->를 사용하면 코드가 더 간결하고 읽기 쉬워집니다.

요약:

화살표 연산자(->)는 포인터가 가리키는 객체의 멤버에 접근할 때 사용되며, 포인터를 통해 객체의 메서드나 변수를 호출할 수 있게 해줍니다. 이는 객체 지향 프로그래밍에서 객체를 다루는 데 매우 중요한 기능

 

 

1. 포인터와 객체의 관계

  • 객체: 클래스의 인스턴스입니다. 클래스는 데이터와 메서드를 정의하는 템플릿입니다.
  • 포인터: 특정 데이터 타입의 메모리 주소를 저장하는 변수입니다. 객체를 가리킬 수 있습니다.

2. 화살표 연산자의 기능

  • 구문: 포인터->멤버
    • 여기서 포인터는 객체를 가리키는 포인터이며, 멤버는 객체의 변수 또는 메서드입니다.

3. 사용 예시

예제 클래스 정의

class Point {
public:
    int x;
    int y;

    void setCoordinates(int a, int b) {
        x = a;
        y = b;
    }
};

객체 생성 및 포인터 사용

 

Point* p = new Point(); // Point 객체를 동적으로 생성하고 포인터 p에 저장
p->setCoordinates(10, 20); // 화살표 연산자를 사용하여 메서드 호출
  • 이 코드에서 p는 Point 객체를 가리키는 포인터입니다.
  • p->setCoordinates(10, 20);는 p가 가리키는 Point 객체의 setCoordinates 메서드를 호출합니다.
  • 이 메서드는 객체의 x와 y 멤버 변수를 설정합니다.

4. 동등한 표현

화살표 연산자는 점 연산자(.)와 함께 사용되는 포인터와 객체 간의 관계를 나타냅니다. 포인터를 통해 객체를 가리킬 때는 ->를 사용하고, 객체를 직접 사용할 때는 .를 사용합니다.

(*p).setCoordinates(10, 20); // 포인터를 역참조한 후 점 연산자로 메서드 호출
  • 위의 코드는 화살표 연산자를 사용한 코드와 같은 결과를 생성합니다.
  • (*p)는 포인터 p가 가리키는 객체를 역참조하여 실제 객체에 접근합니다.

5. 복합 구조체 및 클래스 사용

화살표 연산자는 복합 구조체나 클래스에서도 유용하게 사용됩니다. 예를 들어, 클래스 안에 다른 클래스를 멤버로 포함할 수 있습니다.

class Circle {
public:
    Point center; // Point 객체를 멤버로 포함
    int radius;
};

class Shape {
public:
    Circle* circlePtr; // Circle 객체를 가리키는 포인터

    void setCircle(int x, int y, int r) {
        circlePtr->center.setCoordinates(x, y); // 화살표 연산자를 사용하여 멤버에 접근
        circlePtr->radius = r; // Circle의 radius 설정
    }
};
  • 이 예제에서는 Shape 클래스가 Circle 객체를 가리키는 포인터를 가지고 있습니다.
  • circlePtr->center.setCoordinates(x, y);는 circlePtr이 가리키는 Circle 객체의 center 멤버의 메서드에 접근하는 방식입니다.

6. 주의사항

  • 메모리 관리: 동적으로 할당한 객체는 사용이 끝난 후 delete를 통해 메모리를 해제해야 합니다. 그렇지 않으면 메모리 누수가 발생할 수 있습니다.
delete p; // 동적으로 할당한 Point 객체 해제
  • 널 포인터 체크: 포인터가 유효한 객체를 가리키고 있는지 확인해야 합니다. 그렇지 않으면 프로그램이 크래시될 수 있습니다.
if (p != nullptr) {
    p->setCoordinates(10, 20);
}

요약

화살표 연산자(->)는 C++에서 포인터를 사용하여 객체의 멤버에 접근하는 데 필수적인 요소

728x90

'반도체 > C++' 카테고리의 다른 글

클래스 잘쓰는법  (0) 2024.12.04
C++ enum 열거형  (0) 2024.12.04
36. C++에서 배열과 포인터 관계  (0) 2024.09.03
35. C++에서의 포인터 개념  (0) 2024.09.03
34.1 사원 관리 프로그램 추가 C++  (0) 2024.09.03