c++ 연산자 오버로딩 무엇이 잘못되었는지 좀 알려주세요
조회수 2037회
연산자 오버로딩을 하면서 + 부분을 구현하는데 안되더라구요 확인차원에서 일반적으로 때려 박아 봤는데 역시나 안되서 글남겨봅니다. 문법문제인거 같은데 저가 C++처음이라 잘모르겠습니다. +연산자 보시고 +부분만 왜틀렸는지 설명 부탁드리겠습니다.
#include <iostream>
using namespace std;
class IntegerSet {
int numElements, maxNumElements;
int *elements;
public:
IntegerSet(int max) {
numElements = 0;
maxNumElements = max;
elements = new int[max];
}
~IntegerSet(); // to implement
int addAnElement(int element); // add an integer element, to implement
IntegerSet operator+(const IntegerSet& other); // union, to implement
IntegerSet operator-(const IntegerSet& other); // difference, to implement
IntegerSet operator*(const IntegerSet& other); // intersection, to implement
friend ostream& operator<<(ostream& os, const IntegerSet& integerSet);
};
IntegerSet::~IntegerSet() {
delete(elements);
}
int IntegerSet::addAnElement(int element) {
if (numElements < maxNumElements) {
elements[numElements] = element;
numElements++;
return 0;
}
else
return -1;
}
//여기 왜 안되죠?
IntegerSet IntegerSet::operator+(const IntegerSet& other) {
IntegerSet temp(5);
temp.addAnElement(22);
return temp;
}
ostream& operator<<(ostream& os, const IntegerSet& integerSet) {
cout << "number of elements : " << integerSet.numElements << "\n";
for (int i = 0;i<integerSet.numElements;i++)
cout << integerSet.elements[i]<<" ";
cout << "\n";
return os;
}
int main() {
IntegerSet a(10), b(5);
int i;
for (i = 0;i < 5;i++) {
a.addAnElement(i);
b.addAnElement(10 - i);
}
cout << a << endl;
cout << b << endl;
IntegerSet c = a + b;
return 0;
}
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
문법에 문제가 있었다면, 컴파일이 안되는게 정상입니다.
함수 로직을 한번 살펴보는게 어떨까요?
질문에 올려주신 operator+는 프로그램 코드 상으로 별 문제가 없습니다.
실제 해보신 코드가 아니라고 생각되는 데요. 원래 가지신 로직에서 루프의 탈출 조건 등을 살표보는게 좋을것 같습니다.
그리고 첨삭하자면, 복사생성자를 정의해야 제대로 동작할 것 같습니다.
기본 복사 생성자는 다음과 같습니다.
- 객체간의 변수의 값을 복사 --> 얕은 복사, 위 경우 new 로 만든 포인터를 공유하게됨.
복사 생성자의 호출 시점은 다음과 같습니다.
- 객체의 선언과 동시에 초기화 될 때
- 함수에 매개변수로 객체를 전달할 때 ( Call by Value 경우 )
- 반환값으로 객체를 반환할 때. --> 여기에 해당하는데 --> 동적할당을 하고 있으므로 깊은 복사가 필요함으로 복사생성자를 만들어주세요.
댓글 입력