c++ 연산자 예제

이제 동일한 논리가 연산자 오버로드와 함께 제공됩니다: 특히 함수 호출이 복잡한 경우 유지 관리가 용이하기 위해 한 연산자가 다른 연산자의 관점에서 정의되는 경우가 많습니다. 따라서 클래스의 일부 데이터 값이 사용자의 책임(이 경우 클래스가 해당 데이터에 대해 get(/set(set() 메서드를 가져야 하지만 클래스가 제어하려는 데이터에 get(/set() 메서드가 반드시 없는 경우의 예를 볼 수 있습니다. 접두사 및 접두사 ++ 연산자는 두 가지 정의를 가질 수 있기 때문에 C++ 언어는 두 가지 다른 서명을 제공합니다. 둘 다 operator++()라고 하지만 접두사 버전은 매개 변수를 사용하지 않으며 postfix 버전은 더미 int. 다른 사람에게도 적용됩니다.) 하위 스크립트 연산자 []는 멤버 함수여야 하는 이진 연산자입니다(따라서 명시적 매개 변수인 인덱스만 사용). 하위 스크립트 연산자는 정수 인덱스를 취하는 것에 국한되지 않습니다. 예를 들어 std::map 템플릿의 하위 스크립트 연산자의 인덱스는 키 유형과 동일하므로 문자열 등이 될 수 있습니다. 하위 스크립트 연산자는 일반적으로 두 번 오버로드됩니다. 비상함수(요소가 변경되는 경우)와 상수 함수(요소에만 액세스되는 경우)로 합니다. 함수 호출 연산자 () 는 일반적으로 함수처럼 동작하거나 기본 작업이 있는 클래스에 대해 개체를 만들기 위해 오버로드됩니다. 함수 호출 연산자는 멤버 함수여야 하지만 다른 제한사항은 없습니다 .

클래스에는 함수 호출 연산자에 대한 몇 가지 정의가 있을 수도 있습니다. 물론 숫자 메서드에서 이런 종류의 많은 예가 있으며 스파스 행렬은이 문제에 대한 완전히 다른 차원입니다. 일반적으로 연산자() 접근 방식을 사용하여 희소 행렬을 구현하거나 행/열 순서를 교환하는 것이 더 쉬우므로 operator() 접근 방식은 아무 것도 잃지 않고 무언가를 얻을 수 있습니다. 이러한 연산자만 오버로드하여 관습적인 산술 연산을 수행하는 것이 좋습니다. 연산자가 멤버 함수로 오버로드되었기 때문에 개인 필드에 액세스할 수 있습니다. 오버로드 된 연산자는 특수 함수 이름의 함수입니다. 운영자는 불개합니다,&| 이진입니다. 그것은 정상 사용에 주목해야한다, & | 왼쪽 심연에 따라 오른쪽 진연산이 평가되지 않을 수 있는 “단락” 동작이 있습니다. 오버로드되면 이러한 연산자는 함수 호출 우선 순위를 가지며 이 단락 동작은 손실됩니다. 이러한 연산자는 그대로 두는 것이 가장 좋습니다. 이 방법을 넣어: operator() 접근 방식은 []]]접근 방식보다 더 나쁘고 때로는 더 낫습니다. 이 세 연산자, 연산자&(), 연산자*() 및 연산자->()는 오버로드될 수 있습니다.

일반적으로 이러한 연산자는 원시 포인터의 동작을 모방하려고 시도하는 스마트 포인터 또는 클래스에 대해서만 오버로드됩니다. 포인터 연산자 operator->()에는 해당 연산자호출의 결과 포인터 또는 오버로드된 operator->()가 있는 클래스를 반환해야 하는 추가 요구 사항이 있습니다.