2013-04-23 6 views
1

그래서 필자가 작성한 클래스에 대해 두 가지 버전의 대괄호 연산자를 작성해야합니다.연산자 [] 오버로드 C++

세부 정보 : 클래스에는 문자열 배열 인 개인 변수가 있습니다. operator []의 버전은 const가되어야하고 다른 버전은

입니다.이 두 버전이 실제로 어떻게 다른지, 그리고 호출 할 때 차별화 할 수있는 방법은 조금 확실하지 않습니다.

한 나는 현재

string& MyClass::operator[](unsigned int index); 

단순히 인덱스의 문자열을 반환 작성했습니다.

제 질문은 하나의 const와 하나의 non-const를 갖는 점은 무엇입니까? 그리고 그들은 어떻게 서로 다를 것입니까?

편집 : 이 글을 작성해야하므로 각 함수 내의 코드는 동일합니까?

+0

여기에서 모든 대답 읽기 : http://stackoverflow.com/questions/13479548/why-having-const-and-non-const-accessors – Salgar

+0

@Salgar 취급 (포장 된 용기)에는 몇 가지 추가 고려 사항이 필요할 수 있습니다 ... –

답변

3

올바른 오버로드 된 버전은 다음과 같습니다

  1. 액세스 비 const를 MyClass의 인스턴스를

    std::string& MyClass::operator[](unsigned int index);

  2. 액세스 CONST 또는 임시 MyClass의 인스턴스를

    const std::string& MyClass::operator[](unsigned int index) const;

후자는 상수 인스턴스 참조를 통한 액세스가 반환 된 std::string 참조를 수정하지 못하게하지만 결과를 반환한다는 것을 보장합니다.

구현시 현재 알 수없는 색인 값에 대해 컨테이너에 새로운 (기본값) 문자열 값을 추가 할 수 있다는 것을 고려해야하며 const 액세스에 대해 알 수없는 색인 값을 처리하는 방법을 결정해야합니다 (빈 문자열 반환 예외를 throw하는 등).