C++연산 자 리 셋 규칙 상세 설명

C++다시 불 러 올 수 있 는 연산 자 와 다시 불 러 올 수 없 는 연산 자
C++에서 대부분의 연산 자 는 다시 불 러 올 수 있 습 니 다.구체 적 인 규정 은 표 참조 입 니 다.

다시 불 러 올 수 없 는 연산 자 는 5 개 입 니 다:
.  (구성원 접근 연산 자)
.*  (멤버 포인터 접근 연산 자)
::  (도 메 인 연산 자
sizeof  (길이 연산 자
?:  (조건 부 연산 자
앞의 두 연산 자 를 다시 불 러 올 수 없 는 것 은 구성원 에 게 접근 하 는 기능 이 바 뀌 지 않도록 하기 위 한 것 입 니 다.도 메 인 연산 자 와 sizeof 연산 자의 연산 대상 은 변수 나 일반 표현 식 이 아 닌 유형 으로 다시 불 러 오 는 특징 이 없습니다.
C++연산 자 를 다시 불 러 오 는 규칙
C++연산 자 재 부팅 에 대해 다음 과 같은 몇 가지 규칙 을 정의 합 니 다.
1)C++는 사용자 가 새로운 연산 자 를 정의 하 는 것 을 허용 하지 않 고 기 존의 C+연산 자 만 다시 불 러 올 수 있 습 니 다.예 를 들 어 베 이 직 에 서 는'**'를 멱 연산 자로 사용 하 는 것 이 편리 하 다 고 생각 하고,C++에서'**'를 멱 연산 자로 정의 하고'3**5'로 35 를 표시 하 는 것 은 안 된다.
2)무 거 운 짐 은 연산 자 연산 대상(즉 밀 치 는 개수)의 개 수 를 바 꿀 수 없다.예 를 들 어 관계 연산 자'>'와'<'등 은 두 개의 연산 자 이 고 다시 불 러 온 후에 도 두 개의 연산 자 이 므 로 두 개의 인자 가 필요 합 니 다.연산 자'+','-','*','&'등 은 한 항목 연산 자 일 수도 있 고 두 항목 연산 자 일 수도 있 으 며 각각 한 항목 연산 자 나 두 항목 연산 자 로 다시 불 러 올 수 있다.
3)재 부팅 은 연산 자의 우선 순 위 를 바 꿀 수 없습니다.예 를 들 어'*'와'/'는'+'와'-'보다 우선 하고 아무리 재 부팅 을 해도 각 연산 자 간 의 우선 순 위 는 변 하지 않 습 니 다.프로그램 에서 어떤 연산 자의 우선 순 위 를 바 꾸 고 싶 을 때 도 있 으 며,괄호 를 넣 는 방법 으로 연산 자의 연산 순 서 를 강제로 바 꿀 수 밖 에 없다.
4)무 거 운 짐 은 연산 자의 결 함 성 을 바 꿀 수 없다.예 를 들 어 할당 연산 자 는 오른쪽 결합 성(오른쪽 에서 왼쪽)이 고 다시 로드 한 후에 도 오른쪽 결합 성 입 니 다.
5)연산 자 를 다시 불 러 오 는 함 수 는 기본 적 인 매개 변 수 를 가 질 수 없습니다.그렇지 않 으 면 연산 자 매개 변수의 개 수 를 바 꾸 고 앞의 두 번 째(2)점 과 모순 합 니 다.
6)다시 불 러 오 는 연산 자 는 사용자 가 정의 하 는 사용자 정의 형식의 대상 과 함께 사용 해 야 합 니 다.그 매개 변 수 는 적어도 하나의 클래스 대상(또는 클래스 대상 의 참조)이 있어 야 합 니 다.즉,매개 변 수 는 모두 C++의 표준 형식 일 수 없습니다.사용자 가 표준 형식 데이터 에 사용 되 는 연산 자의 성질 을 수정 하 는 것 을 방지 할 수 있 습 니 다.예 를 들 어 아래 와 같은 것 은 옳지 않 습 니 다.

  int operator + (int a,int b)
  {
    retum(a-b);
  }
원래 연산 자+의 역할 은 두 개의 수 를 더 하 는 것 이 었 는데,지금 은 무 거 운 짐 을 통 해 두 개의 수 를 상쇄 시 키 려 고 한다.이렇게 다시 불 러 올 수 있다 면 표현 식 4+3 이 있 으 면 결 과 는 7 일 까요?1 일 까요?분명히 이것 은 절대 금 지 된 것 이다.
만약 에 두 개의 매개 변수 가 있다 면 이 두 개의 매개 변 수 는 모두 클래스 대상 일 수도 있 고 하 나 는 클래스 대상 일 수도 있 으 며 하 나 는 C+표준 형식의 데이터 이다.예 를 들 어

  Complex operator + (int a,Complex&c)
  {
    return Complex(a +c.real, c.imag);
  }
그것 의 작용 은 하나의 정수 와 하나의 복 수 를 더 하 는 것 이다.
7)클래스 대상 에 사용 되 는 연산 자 는 일반적으로 다시 불 러 와 야 하지만 두 가지 예외 가 있 습 니 다.연산 자'='과'&'는 다시 불 러 올 필요 가 없습니다.
① 할당 연산 자(=)는 각 유형의 대상 에 사용 할 수 있 고 같은 대상 간 에 서로 할당 할 수 있다.우 리 는 클래스 의 대상 x 값 을 할당 연산 자로 표시 할 수 있다 는 것 을 알 고 있 습 니 다.이것 은 시스템 이 모든 새로운 성명 의 클래스 에 할당 연산 자 를 다시 불 러 왔 기 때 문 입 니 다.그 역할 은 복사 류 의 데이터 구성원 입 니 다.사용 자 는 시스템 이 제공 하 는 기본 적 인 대상 할당 연산 자 라 고 생각 할 수 있 으 며,대상 간 의 할당 에 직접 사용 할 수 있 으 며,스스로 다시 불 러 올 필요 가 없다.그러나 시스템 이 제공 하 는 기본 대상 할당 연산 자 는 프로그램의 요 구 를 만족 시 키 지 못 할 때 도 있 습 니 다.예 를 들 어 데이터 구성원 에 동적 으로 메모 리 를 할당 하 는 포인터 구성원 이 포함 되 어 있 을 때 이 구성원 을 복사 할 때 위험 할 수 있 습 니 다.이런 상황 에서 자신 이 할당 연산 자 를 다시 불 러 와 야 한다.
② 주소 연산 자&다시 불 러 올 필요 도 없습니다.클래스 대상 이 메모리 에 있 는 시작 주 소 를 되 돌려 줍 니 다.
8)이론 적 으로 말 하면 하나의 연산 자 를 임의의 조작 으로 다시 불 러 올 수 있다.만약 에 덧셈 연산 자 를 출력 대상 의 정보 로 다시 불 러 올 수 있다 면'>'연산 자 를'작은'연산 으로 다시 불 러 올 수 있다.그러나 이 는 연산 자 를 다시 싣 겠 다 는 취지 에 어 긋 나{가 독성 은 말 하지 않 았 을 뿐만 아니 라 오히려 영문 도 모 르 고 절 차 를 이해 할 수 없 었 다.이 연산 자 를 다시 불 러 오 는 기능 이 표준 유형의 데이터 에 작용 할 때 실현 되 는 기능 과 유사 하도록 해 야 한다(예 를 들 어'+'로 덧셈 을 실현 하고'>'로'큰'관계 연산 을 실현 해 야 한다).
9)연산 자 과부하 함 수 는 클래스 의 구성원 함수 일 수도 있 고 클래스 의 친구 함수 일 수도 있 으 며 클래스 가 아 닌 구성원 함수 일 수도 있 고 친구 편지 의 일반 함수 가 아 닐 수도 있다.
이상 의 이 규칙 들 은 쉽게 이해 할 수 있 으 니,억지로 기억 할 필요 가 없다.그것들 을 한데 모 아 소개 하 는 것 은 단지 독자 로 하여 금 하나의 전체적인 개념 을 가지 게 하기 위해 서 이 며,또한 쉽게 찾 아 볼 수 있 게 하기 위해 서 이다.

좋은 웹페이지 즐겨찾기