C++의 화살표 연산자 대 도트 연산자
C++에서 클래스 멤버에 액세스하기 위해 점 및 화살표 연산자를 모두 사용합니다. 그러나 이것이 둘 다 동일하다는 것을 의미하지는 않습니다.
이 기사에서 살펴볼 이 두 연산자 사이에는 몇 가지 차이점이 있습니다. 이 문서 전체에서 클래스, 공용체 및 구조체 유형은 모두 클래스 유형
으로 취급됩니다.
도트 연산자가 화살표 연산자와 어떻게 다른지 이해하기 위해 먼저 이 두 연산자의 기본 사항을 살펴보겠습니다.
C++의 점(.
) 연산자
클래스 멤버 액세스 연산자라고도 하는 C++의 점(.
) 연산자는 지정된 클래스의 공용 멤버에 액세스하는 데 도움이 됩니다. 여기서 public 멤버는 클래스의 변수와 메서드일 뿐입니다.
통사론:
name_of_object.name_of_member;
예제를 보고 점 연산자가 어떻게 작동하는지 살펴보겠습니다.
다음 예제에서 클래스 desserts
에는 공개 데이터 멤버 chocolate
와 함께 개인 데이터 멤버 cakes
하나와 공개 멤버 함수 init()
및 display()
두 개가 있습니다.
이제 도트 연산자를 사용하여 특정 변수 및 함수에 액세스하고 값을 변수에 할당할 수 있습니다. main()
함수 내에서 다음 위치에서 도트 연산자를 사용합니다.
- 공개 멤버 함수
init()
를 통해 프라이빗 데이터 멤버cakes
에 값100
을 할당합니다. - 공개 데이터 멤버인
chocolates
에 값200
을 할당합니다. - 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
구조에는 flavor
와 number
라는 두 개의 멤버가 있습니다.
이 구조에는 항목
이라는 개체가 있습니다. 그런 다음 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
조합에는 flavor
와 number
라는 두 멤버가 있습니다.
이 조합에는 항목
이라는 개체가 있습니다. 그런 다음 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++에서 점 및 화살표 연산자의 기본 사항을 다루었으므로 이제 더 자세히 살펴보고 차이점을 확인해야 합니다. 다음은 알아야 할 점과 화살표 연산자의 모든 차이점 목록입니다.
-
점(
.
) 연산자는 클래스의 요소에 직접 액세스하는 반면 화살표(->
) 연산자는 포인터를 사용하여 이를 수행합니다. 요소에 대한 직접 액세스는 다음과 같습니다.object_name.element
반면에 포인터를 사용하여 요소에 액세스하려면 다음을 수행합니다.
pointer->element
이것은 점(
.
) 연산자가 개체에 사용되는 반면 화살표 연산자는 개체를 가리키는 포인터와 함께 사용됨을 의미합니다. 이를 더 잘 이해하기 위해 예를 들어 보겠습니다.객체
Demo
가 있고 그 메서드 중 하나를test()
라고 부르길 원한다고 가정해 보겠습니다. 이를 위해 다음과 같이 점(.
) 연산자를 사용합니다.Demo.test()
대신 화살표 연산자를 사용하면 같은 의미가 아닙니다. 여기서 아래 코드는
Demo
개체가 아니라 포인터Demo
가 가리키는 개체에서test()
메서드를 호출합니다.이는 화살표 연산자가 먼저 포인터를 역참조하여 그것이 가리키는 개체로 이동할 수 있기 때문입니다.
Demo->test
-
점(
.
) 연산자는 화살표(->
) 연산자와 달리 포인터에 적용할 수 없습니다.(*p).element
는p->element
와 같습니다.점(
.
) 연산자의 우선 순위가*
보다 높기 때문에(*p).element
내부의 이 괄호가 사용됩니다. 따라서*
를 먼저 평가하기 위해 괄호를 사용합니다.그러나 이를 단순화하는 가장 좋은 방법은 전체 부분
(*p)
를p->
와 같은 포인터로 대체하여 우선 순위에 대한 혼동이 없도록 하는 것입니다. -
C++에서 화살표(
->
) 연산자를 오버로드할 수 있는 반면 점(.
) 연산자는 오버로드할 수 없습니다. C++의 연산자 오버로딩에 대한 자세한 내용은 이 문서를 참조하세요.
이것은 점과 화살표 연산자가 어떻게 다른지에 관한 것입니다.
결론
이 기사에서는 점 연산자와 화살표 연산자의 기본 사항에 대해 논의하고 이들이 어떻게 다른지 살펴보았습니다. 우리는 화살표 연산자가 어떻게 괄호와 점 연산자의 확장인지 그리고 이것이 이 두 가지가 작동하는 방식에 어떤 영향을 미치는지 살펴보았습니다.