점과 화살표 연산자는 모두 C++에서 클래스의 멤버에 액세스하는 데 사용됩니다. 그들은 단지 다른 시나리오에서 사용됩니다. C++에서 클래스, 구조체 또는 공용체로 선언된 유형은 "클래스 유형"으로 간주됩니다. 따라서 다음은 이 세 가지를 모두 나타냅니다.
- a.b는 b가 개체의 구성원(또는 개체에 대한 참조[1])인 경우에만 사용됩니다. 따라서 a.b의 경우 항상 클래스의 실제 객체(또는 객체에 대한 참조)가 됩니다.
- a→b는 본질적으로 (*a).b의 약식 표기법입니다. 즉, a가 객체에 대한 포인터이면 a→b는 객체가 가리키는 속성 b에 액세스합니다. .
참고하세요. 과부하가 걸리지 않습니다. →는 오버로드 가능한 연산자이므로 이 연산자를 사용할 때 호출되어야 하는 자체 함수(operator→())를 정의할 수 있습니다. 따라서 operator→를 오버로드하는 클래스의 객체인 경우(일반적인 유형은 스마트 포인터와 반복자임), 의미는 클래스 디자이너가 구현한 모든 것입니다.
[1] 참조는 의미상 객체에 대한 별칭이므로 #3에도 "또는 포인터에 대한 참조"를 추가했어야 했습니다. 그러나 포인터(T*&)에 대한 참조는 거의 사용되지 않기 때문에 이것이 도움이 되기보다는 혼란스러울 것이라고 생각했습니다.
예
#include<iostream> class A { public: int b; A() { b = 5; } }; int main() { A a = A(); A* x = &a; std::cout << "a.b = " << a.b << "\n"; std::cout << "x->b = " << x->b << "\n"; return 0; }
출력
이것은 출력을 제공합니다 -
5 5