C++ 생성자 오버로딩, 그리고 []연산자 오버로딩에 관하여...
글쓴이: lovelyphy07 / 작성시간: 목, 2012/03/15 - 9:57오후
안녕하세요? C++에서 오버로딩 문제에 관해 여쭙고 싶어 글을 올려봅니다 :D
먼저 생성자 오버로딩에서...
class A {
public:
A(int a, int b);
...
private:
int aA, int bB;
};
...
A::A(int a = 0, int b = 0) : Aa(a), Bb(b) {}
와 같이 했는데, 나중에 A instance1()을 하면 컴파일 에러가 발생하더라고요...
생성자의 본체에서 매개변수의 기본값을 설정해 주면 A() 생성자로 인식이 되는 줄 알았는데... 제가 무엇을 잘못하고 있는걸까요?^^
그리고 괄호 연산자 오버로딩에서..
지금 첨자 범위를 검사해주는 배열 클래스를 만들고 있습니다.
float& CppArray::operator[] (int i) {
} 를 하고, 영역 검사를 해서 영역 범위 안에 있으면 값을 집어 넣는 것 까지는 잘했는데...
문제는 대입이더군요..
CppArray a로 만든 배열 인스턴스 a에 대해, a의 크기보다 큰 첨자 m에 대하여 a[m]값을 쓰는 것은 문제가 없는데, a[m] = 10과 같이 대입을 하는 것은
어떻게 처리를 해주는게 가장 센스 있는 것일까요? throw로 예외처리를 하나요?!
Forums:
A instance1(); 로 변수를 생성하시면
A instance1(); 로 변수를 생성하시면 변수가 생성되는게 아니라 A를 반환하는 함수 instance1이 선언됩니다. A instance; 로 변수를 생성하셔야 합니다.
표준 라이브러리에선 [] 오퍼레이터 자체는 범위 검사를 하지 않고, at(size_t n) 과 같은 멤버함수에서 바운드 관련 익셉션을 던져줍니다.
감사합니다 ^^
감사합니다 ^^ 다시한번 해보도록 하겠습니다 :)
댓글 달기