C++중점 조작 부호 와 화살표 조작 부호 의 사용 에 대한 상세 한 설명

구별
C++에서 클래스 에 있어 서 그 중의 구성원 에 게 점 연산 자 를 사용 하여 얻 을 수 있 습 니 다.
클래스 대상 을 가리 키 는 지침 에 대해 서 는 화살표 연산 자->이 지침 이 가리 키 는 대상 의 구성원 을 호출 합 니 다.
클래스 정의->연산 자 를 다시 불 러 오 면 화살표 연산 자 를 사용 할 수도 있 고 점 연산 자 를 사용 할 수도 있 습 니 다.다시 불 러 오기->연산 자
다시 불 러 오 는 화살표 조작 자 는 클래스 구성원 함수 로 정의 해 야 합 니 다.현식 형 삼 이 없다.의 오른쪽 조작 수 는 표현 식 이 아니 라 해당 하 는 구성원 의 식별 자 이 며 컴 파일 러 처리 로 구성원 작업 을 가 져 옵 니 다.
화살표 조작 자 를 다시 불 러 오 려 면 클래스 형식의 지침 을 되 돌려 야 하거나,자신의 화살표 조작 자 를 정의 한 클래스 형식 대상 을 되 돌려 야 합 니 다.
반환 형식 이 포인터 라면 화살표 연산 자 를 내장 하여 이 포인터 에 사용 할 수 있 습 니 다.컴 파일 러 는 이 포인터 에 대한 인용 을 풀 고 결과 대상 에서 지정 한 구성원 을 가 져 올 수 있 습 니 다.가리 키 는 형식 이 그 구성원 을 정의 하지 않 으 면 컴 파일 러 에 오류 가 발생 합 니 다.반환 형식 이 클래스 형식의 다른 대상(또는 이 대상 의 참조)이 라면 이 조작 자 를 재 귀적 으로 적용 합 니 다.컴 파일 러 는 대상 이 속 한 유형 에 구성원 화살표 가 있 는 지 확인 하고 있 으 면 그 조작 자 를 사용 합 니 다.그렇지 않 으 면 컴 파일 러 에 오류 가 발생 합 니 다.이 과정 은 지 정 된 구성원 이 있 는 대상 을 가리 키 는 지침 을 되 돌려 주거 나 다른 값 을 되 돌려 줄 때 까지 계속 되 었 습 니 다.다음 상황 에서 코드 가 잘못 되 었 습 니 다.코드 분석:
다음은 코드 를 드 리 고 이 해 를 깊 게 하 겠 습 니 다.

#include <iostream>

 using namespace std;

 class A{
 public:
     void action()
     {
         cout<<"action in class A!"<<endl;
     }
 };

 class B{
         //A a;  
 public: 
     A a;
     A* operator->(){  
         return &a;  
     }  
     void action(){  
         cout << "Action in class B!" << endl;  
     }
 };

 class C{

 public:  
     B operator->(){  
         return b;  
     }  
     void action(){  
         cout << "Action in class C!" << endl;  
     }
 };

 int main()  
 {  
     C* pc = new C;  
     pc->action();  
     C c;  
     c->action();   
     return 0;  
 }
위의 코드 출력 결 과 는:Action in class C!Action in class A!
코드

    C* pc = new C;
    pc->action();
출력 결과:Action in class C!이것 은 pc 가 클래스 대상 포인터 이기 때 문 입 니 다.이때 화살표 조작 자 는 내 장 된 의 미 를 사용 하고 pc 에 대한 인용 을 풀 고 대상 의 구성원 함수 action 을 호출 합 니 다.
코드:

    C c;
    c->action();
이렇게 이해 할 수 있 습 니 다.
c 는 대상 입 니 다.c 뒤의 화살표 연산 자 는 화살표 연산 자 를 다시 불 러 옵 니 다.즉,클래스 C 의 operator->()구성원 함 수 를 호출 합 니 다.이때 클래스 B 의 대상 을 되 돌려 주기 때문에 클래스 B 의 operator->()구성원 함 수 를 호출 하고 B 의 operator->()는 지침 을 되 돌려 주기 때문에 이 제 는 내 장 된 화살표 조작 자 를 사용 할 수 있 습 니 다.B 의 operator->()되 돌아 오 는 지침 에 대해 인용 을 풀 고 인용 한 대상 의 구성원 함수 action 을 호출 합 니 다.이때 호출 된 것 은 클래스 A 의 action()입 니 다.여기에 operator->()를 재 귀적 으로 호출 하 는 과정 이 존재 하 며,마지막 으로 내 장 된 의 미 를 가 진 화살표 조작 자 를 다시 사용 합 니 다.

좋은 웹페이지 즐겨찾기