-
[잡담] C++ 연산자오버로딩 관련해서 질문있습니다.2019.03.29 AM 11:09
[]를 연산자오버로딩하는 예제의 일부인데요.
public:
ACCOUNT_PTR& operator[] (int idx);
ACCOUNT_PTR operator[] (int idx) const;
ACCOUNT_PTR& BoundCheckAccountPtrArray::operator[] (int idx)
{
if(idx<0 || idx>=arrlen)
{
cout<<"Array index out of bound exception"<<endl;
exit(1);
}
return arr[idx];
}
ACCOUNT_PTR BoundCheckAccountPtrArray::operator[] (int idx) const
{
if(idx<0 || idx>=arrlen)
{
cout<<"Array index out of bound exception"<<endl;
exit(1);
}
return arr[idx];
}
저 두 함수가 const와 반환형만 조금 다르고 나머지는 같은데 어떻게 구분되고 있는 건가요?
댓글 : 13 개
- Lifeisbeaten
- 2019/03/29 AM 11:16
반환형도 다르고const도 달려 있으니 다르죠...
- Lime Leaf
- 2019/03/29 AM 11:18
오버로딩은 이름하고 인수만 비교하는 거 아닌가요?
- Lifeisbeaten
- 2019/03/29 AM 11:19
arr 내부에 담는 자료형이 포인터 같은데 맞나요?
그럴때나 의미있어 보이는 반환형 구문이긴 하네요.
그럴때나 의미있어 보이는 반환형 구문이긴 하네요.
- Lime Leaf
- 2019/03/29 AM 11:22
네, 맞습니다.
typedef Account * ACCOUNT_PTR;
private:
/ ACCOUNT_PTR * arr;
/ int arrlen;
typedef Account * ACCOUNT_PTR;
private:
/ ACCOUNT_PTR * arr;
/ int arrlen;
- Lifeisbeaten
- 2019/03/29 AM 11:25
배열은 본래 주소값이고 &는 참조라는 것
두번째 오버라이딩은 자료형 그자체를 리턴하는거고
첫번째는 배열 내부에 존재하는 엘레멘탈의 주소값을 리턴하는거라고 보시면 됩니다.
구분해서 써야할 이유가 있어 보이는 구문이긴 해요.
배열[1] = new XXXX();
배열[2] = new XXXX();
배열[3] = new XXXX();
배열[4] = new XXXX();
배열[5] = new XXXX();
에 접근하는거라고 보시면 됩니다.
사실 요즘엔 저런 패턴으로 잘 안쓰죠 저럴꺼면 그냥 STL 컨테이너에 담는게 깔끔해요.
두번째 오버라이딩은 자료형 그자체를 리턴하는거고
첫번째는 배열 내부에 존재하는 엘레멘탈의 주소값을 리턴하는거라고 보시면 됩니다.
구분해서 써야할 이유가 있어 보이는 구문이긴 해요.
배열[1] = new XXXX();
배열[2] = new XXXX();
배열[3] = new XXXX();
배열[4] = new XXXX();
배열[5] = new XXXX();
에 접근하는거라고 보시면 됩니다.
사실 요즘엔 저런 패턴으로 잘 안쓰죠 저럴꺼면 그냥 STL 컨테이너에 담는게 깔끔해요.
- Lime Leaf
- 2019/03/29 AM 11:34
예제에 오류가 있는거라고 생각하면 되려나요?
둘 중 하나는 작동을 안하고 있을 거 같긴 한데.
둘 중 하나는 작동을 안하고 있을 거 같긴 한데.
- Lifeisbeaten
- 2019/03/29 AM 11:38
사용해 보시면 알텐데...
반환값을 받아서 주소를 출력해보시면 좀더 명확하게 알겁니다.
반환값을 받아서 주소를 출력해보시면 좀더 명확하게 알겁니다.
- 아라라기군
- 2019/03/29 AM 11:16
조금 다르다->정확히 다르다 :)
- 돼지한텐나라도법도없어
- 2019/03/29 AM 11:18
조금 다르다 x 완전히 다르다 o
- 돼지한텐나라도법도없어
- 2019/03/29 AM 11:19
object 와 object* 와 object& 는 다른것입니다
- aksiz
- 2019/03/29 PM 12:08
C++잘 모르긴 한데, 잠깐 검색해 본걸로 봐서는 반환형보다는 const가 중요한 걸로 보이네요.
https://www.geeksforgeeks.org/function-overloading-and-const-functions/
const 로 각 함수를 구분하나 보네요.
https://www.geeksforgeeks.org/function-overloading-and-const-functions/
const 로 각 함수를 구분하나 보네요.
- Lime Leaf
- 2019/03/29 PM 12:49
알고보니 const 함수에서 부를 때는 const 함수를 우선적으로 오버로딩 하는 거였더군요.
저도 방금 알아냈습니다.
답변 감사드립니다.
저도 방금 알아냈습니다.
답변 감사드립니다.
- 루리웹-2898369589
- 2019/03/29 PM 12:12
오버로딩 같은 기능 있다고 꼭써야한는거 아닙니다. 함수, 클래스 많아지기 시작하면 정신못차리게됨
user error : Error. B.