C++의 화살표 연산자 대 도트 연산자

Shikha Chaudhary 2023년10월12일
  1. C++의 점(.) 연산자
  2. C++의 화살표(->) 연산자
  3. C++의 화살표 연산자 대 도트 연산자
  4. 결론
C++의 화살표 연산자 대 도트 연산자

C++에서 클래스 멤버에 액세스하기 위해 점 및 화살표 연산자를 모두 사용합니다. 그러나 이것이 둘 다 동일하다는 것을 의미하지는 않습니다.

이 기사에서 살펴볼 이 두 연산자 사이에는 몇 가지 차이점이 있습니다. 이 문서 전체에서 클래스, 공용체 및 구조체 유형은 모두 클래스 유형으로 취급됩니다.

도트 연산자가 화살표 연산자와 어떻게 다른지 이해하기 위해 먼저 이 두 연산자의 기본 사항을 살펴보겠습니다.

C++의 점(.) 연산자

클래스 멤버 액세스 연산자라고도 하는 C++의 점(.) 연산자는 지정된 클래스의 공용 멤버에 액세스하는 데 도움이 됩니다. 여기서 public 멤버는 클래스의 변수와 메서드일 뿐입니다.

통사론:

name_of_object.name_of_member;

예제를 보고 점 연산자가 어떻게 작동하는지 살펴보겠습니다.

다음 예제에서 클래스 desserts에는 공개 데이터 멤버 chocolate와 함께 개인 데이터 멤버 cakes 하나와 공개 멤버 함수 init()display() 두 개가 있습니다.

이제 도트 연산자를 사용하여 특정 변수 및 함수에 액세스하고 값을 변수에 할당할 수 있습니다. main() 함수 내에서 다음 위치에서 도트 연산자를 사용합니다.

  1. 공개 멤버 함수 init()를 통해 프라이빗 데이터 멤버 cakes에 값 100을 할당합니다.
  2. 공개 데이터 멤버인 chocolates에 값 200을 할당합니다.
  3. public 멤버 함수 display()에 액세스합니다.

예제 코드:

#include <iostream>
using namespace std;

class desserts {
 private:
  int cakes;

 public:
  int chocolates;
  void init(int cakes) { this->cakes = cakes; }
  void display() { cout << "Number of cakes: " << cakes << endl; }
};

int main() {
  // object declaration
  desserts q;
  // assign the values
  q.init(100);
  q.chocolates = 200;

  // print the values
  q.display();
  cout << "Number of chocolates: " << q.chocolates << endl;

  return 0;
}

출력:

Number of cakes: 100
Number of chocolates: 200

이것이 C++에서 도트 연산자를 사용하는 방법입니다. 이제 화살표 연산자가 어떻게 작동하는지 살펴보겠습니다.

C++의 화살표(->) 연산자

구조체 또는 공용체의 요소에 액세스하려면 C++에서 화살표 연산자(->)를 사용합니다. 화살표 연산자는 구조체 또는 공용체를 가리키는 포인터 변수를 사용합니다.

통사론:

(name_of_pointer)->(name_of_variable)

예제를 보고 화살표 연산자가 어떻게 작동하는지 살펴보겠습니다. 구조와 공용체 모두에서 작동한다는 점을 기억하십시오.

이 예에서는 구조에서 화살표 연산자를 사용하고 있습니다. 여기에서 desserts 구조에는 flavornumber라는 두 개의 멤버가 있습니다.

이 구조에는 항목이라는 개체가 있습니다. 그런 다음 main 블록 내에서 화살표 연산자를 사용하여 2 값을 변수 number에 할당합니다.

또한 화살표 연산자를 사용하여 변수 숫자 값에 액세스하고 인쇄합니다. 이것은 본질적으로 화살표 연산자가 구조와 함께 작동하는 방식입니다.

예제 코드:

#include <iostream>
using namespace std;

struct desserts {
  char flavor[50];
  int number;
};

// Create the object of the structure
struct desserts* item = NULL;

int main() {
  item = (struct desserts*)malloc(sizeof(struct desserts));

  // use arrow operator to assign value
  item->number = 2;

  cout << "The number of items: " << item->number;

  return 0;
}

출력:

The number of items: 2

공용체에서 화살표 연산자가 사용되는 또 다른 예를 살펴보겠습니다. 여기서 desserts 조합에는 flavornumber라는 두 멤버가 있습니다.

이 조합에는 항목이라는 개체가 있습니다. 그런 다음 main 블록 내에서 화살표 연산자를 사용하여 변수 number에 값을 할당합니다.

또한 화살표 연산자를 사용하여 변수 숫자 값에 액세스하고 인쇄합니다. 공용체의 화살표 연산자는 구조에서와 동일하게 작동합니다.

예제 코드:

#include <iostream>
using namespace std;

// union
union desserts {
  char flavor[50];
  int number;
};

union desserts* item = NULL;

int main() {
  item = (union desserts*)malloc(sizeof(union desserts));

  item->number = 5;
  cout << "The number of items:" << item->number;
}

출력:

The number of items: 5

C++의 화살표 연산자 대 도트 연산자

이제 C++에서 점 및 화살표 연산자의 기본 사항을 다루었으므로 이제 더 자세히 살펴보고 차이점을 확인해야 합니다. 다음은 알아야 할 점과 화살표 연산자의 모든 차이점 목록입니다.

  1. 점(.) 연산자는 클래스의 요소에 직접 액세스하는 반면 화살표(->) 연산자는 포인터를 사용하여 이를 수행합니다. 요소에 대한 직접 액세스는 다음과 같습니다.

    object_name.element
    

    반면에 포인터를 사용하여 요소에 액세스하려면 다음을 수행합니다.

    pointer->element
    

    이것은 점(.) 연산자가 개체에 사용되는 반면 화살표 연산자는 개체를 가리키는 포인터와 함께 사용됨을 의미합니다. 이를 더 잘 이해하기 위해 예를 들어 보겠습니다.

    객체 Demo가 있고 그 메서드 중 하나를 test()라고 부르길 원한다고 가정해 보겠습니다. 이를 위해 다음과 같이 점(.) 연산자를 사용합니다.

    Demo.test()
    

    대신 화살표 연산자를 사용하면 같은 의미가 아닙니다. 여기서 아래 코드는 Demo 개체가 아니라 포인터 Demo가 가리키는 개체에서 test() 메서드를 호출합니다.

    이는 화살표 연산자가 먼저 포인터를 역참조하여 그것이 가리키는 개체로 이동할 수 있기 때문입니다.

    Demo->test
    
  2. 점(.) 연산자는 화살표(->) 연산자와 달리 포인터에 적용할 수 없습니다. (*p).elementp->element와 같습니다.

    점(.) 연산자의 우선 순위가 *보다 높기 때문에 (*p).element 내부의 이 괄호가 사용됩니다. 따라서 *를 먼저 평가하기 위해 괄호를 사용합니다.

    그러나 이를 단순화하는 가장 좋은 방법은 전체 부분 (*p)p->와 같은 포인터로 대체하여 우선 순위에 대한 혼동이 없도록 하는 것입니다.

  3. C++에서 화살표(->) 연산자를 오버로드할 수 있는 반면 점(.) 연산자는 오버로드할 수 없습니다. C++의 연산자 오버로딩에 대한 자세한 내용은 문서를 참조하세요.

이것은 점과 화살표 연산자가 어떻게 다른지에 관한 것입니다.

결론

이 기사에서는 점 연산자와 화살표 연산자의 기본 사항에 대해 논의하고 이들이 어떻게 다른지 살펴보았습니다. 우리는 화살표 연산자가 어떻게 괄호와 점 연산자의 확장인지 그리고 이것이 이 두 가지가 작동하는 방식에 어떤 영향을 미치는지 살펴보았습니다.

관련 문장 - C++ Operator