C++에서 연산자 오버로딩에 대한 질문이 있습니다.연산자 오버로드 : C++
할당을 위해 Java의 ArrayList와 같은 배열을 포함하는 클래스를 작성해야합니다.
내가해야 할 일 중 하나는 배열의 크기를 추적하는 것입니다. Size는 포함 된 요소의 양이며, capacity는 클래스가 배열을 확장해야하기 전에 포함될 수있는 최대량입니다.
클라이언트 코드는 생성자를 호출 할 때 크기를 지정합니다. 그러나 새로운 요소가 추가되면 크기를 변경하는 방법을 찾아야합니다.
선생님은 평등의 다른 측면에서 연산자를 오버로드 할 수 있다고 말했습니다. 이게 진짜인가, 아니면 내가 그녀를 오해 했니? 이것이 작동한다면, 내 문제에 대한 최적의 솔루션이 될 것입니다.
에서 [] 연산자에 대한 나의 현재의 오버로드는 다음과 같습니다
int & ArrayWrapper::operator [] (int position){
if(position == _size){
if(_size == _capacity){
changeCapacity(_capacity+10);
}
}
return _array[position];
}
이 검색을 위해 잘 작동하지만 내가 그것을 가지고 싶습니다 그래서 누군가가 '=의 왼쪽에서를 호출하는 경우 '그러면 크기를 확장해야하는지 여부를 확인합니다.
편집 : 이것이 실제 것이 아니라면 누구나 문제에 대한 다른 해결책을 생각할 수 있습니까? 내가 생각한 한 가지 해결책은 getSize() 메서드를 호출 할 때마다 전체 배열을 통과시키는 것입니다.하지만 그 솔루션을 사용하지는 않을 것입니다.
편집 : 설명을 위해 배열을 확장했는지 여부를 묻지 않았습니다. 새로운 요소가 추가 될 때마다 크기에 1을 더해야합니다. 예를 들어, 클라이언트가 크기 15 및 용량 25의 배열을 만든 다음 Array [15]에 항목을 추가하려고하면 크기를 16으로 늘려야합니다. 오버로드로 인해 수행 할 수있는 방법이 있는지 궁금합니다.
조금 이상합니다. 크기를''10 ''으로 만들고 누군가가''100000'의 크기를''100001''로 확장하고 10-9999 사이의 요소를 무언가로 채워야한다고 생각하십니까? – juanchopanza
예, 그게 무슨 뜻인지. 요구되는 것과 현재 벡터 크기 사이의 차이점을 고려해야합니다. – WhozCraig