[완료]C++ [](첨자 연산자) 연산자 오버로딩 관련해서 질문 좀 드릴께요.
글쓴이: dhckdaks / 작성시간: 수, 2011/11/30 - 2:51오전
C++에서 간단한 예제하나 해보고 있는 중인데요.
대략 현 상황이 class A, class B를 만들어놨습니다.
그리고 class B안에
private 멤버변수로 A *a[12];
이런 식으로 class A의 포인터 배열을 멤버 변수로 가지고 있습니다.
그래서 한개의 B클래스의 인스턴스에는 A클래스의 포인터가 12개 있고, 생성자에서 메모리 할당을 해줬습니다.
그런데 이게 갯수도 상수개가 존재하고 클래스 개념상 [](첨자 연산자)가 있으면 좋겠다 싶어서
class B의 public 멤버 변수로
A operator[](int _index) const{
if(index의 범위 판단)
return *a[_index];
}
이렇게 연산자 오버로딩을 해줬습니다.
그리고 main에서
B클래스의 인스턴스(b라고 부르겠습니다.)를 동적생성 한 후
[](첨자연산자)를 이용, b의 멤버변수 a에 접근해서
a의 멤버함수를 호출하려고 하는데
이상하게 계속 컴파일러가 [](첨자연산자)를 일반적인 배열의 [](첨자연산자)로 인식을 합니다.
예를 들어서 b[5] <-요놈이 A타입을 리턴하는게 아니라 B타입을 리턴하는걸로 컴파일러가 인식을 합니다.
이게 당연한 결관가요? ㅇ_ㅇ;;
그럼 제가 원하던대로 b[5]를 이용해서 a의 멤버함수를 접근하려면 어떻게 해야 되는지 좀 알려주세요.
부탁드립니다. 꾸벅~
Forums:
...
흠, 잘 되어야 될 것 같은데요, 코드를 올려주시면 더 확실한 답을 얻으실 수 있습니다.
* 그리고 operator[]의 리턴타입은 아마도 A&가 더 의도에 맞을 것 같은데요...
...
B클래스 안에서 a의 값들을 자동적으로 채워넣기 때문에 일부러 a에 대한 setter함수도 생성을 하지 않고 getter대신에
[](첨자 연산자)를 이용하는 방식이라 리턴 받은 내용의 값을 변경하지 않고자 하는 의도로 리턴 타입을 A로 했습니다만,
그래도 A&로 하는게 맞는 건가요???
아 그리고 소스코드는 올려보도록 하겠습니다.
그리고 답변 한 번 더 해주시면 감사하겠습니다.꾸벅~
p.s-메인에 보시면 16번째 줄에서 에러가 발생합니다.
포인터에 대하여 []연산자를 썼으니 당연하죠.
지금 myYear은 Year* 타입이지 Year 타입이 아니죠. [] 연산자를 쓸려면 (*myYear)[어쩌고] 해야 맞죠.
아.....
제가 계속 연산자 쪽에만 집중을 하다 보니까 그 부분을 생각을 미쳐 못 했었네요..ㅇㅅㅇ;;
이래서 디버깅 때는 생각을 비우라고 그렇게들....
아무튼 정말 감사합니다.
이제 그 부분은 해결 됏으니까 저는 링크단계 에러를.....(에휴~)처리하러 가보겠습니다.
정말 감사드려요~
댓글 달기