c++ 연산자 오버로딩 무엇이 잘못되었는지 좀 알려주세요


연산자 오버로딩을 하면서 + 부분을 구현하는데 안되더라구요 확인차원에서 일반적으로 때려 박아 봤는데 역시나 안되서 글남겨봅니다. 문법문제인거 같은데 저가 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;
}
  • 2016년 04월 24일에 작성됨

  • 컴파일은 되는 것 같은데..., 연산자 + 로 무엇을 하고자 하는 건가요?    허대영(Daeyoung Heo)   2016.4.24 07:17     
  • 목표는 각각의 집합에 있는 숫자를 합하는걸 만들려고 하고있습니다. 근데 저도 컴파일은 되는데 실행하면 멈추더라구요 그래서 문법에서 문제가 있을거란 생각에 문법 테스트를 위해 위와같이 작성했습니다.    윤준상   2016.4.24 10:47     
조회수 238


1 답변


좋아요
1
싫어요
채택취소하기

문법에 문제가 있었다면, 컴파일이 안되는게 정상입니다.

함수 로직을 한번 살펴보는게 어떨까요?

질문에 올려주신 operator+는 프로그램 코드 상으로 별 문제가 없습니다.

실제 해보신 코드가 아니라고 생각되는 데요. 원래 가지신 로직에서 루프의 탈출 조건 등을 살표보는게 좋을것 같습니다.

그리고 첨삭하자면, 복사생성자를 정의해야 제대로 동작할 것 같습니다.

기본 복사 생성자는 다음과 같습니다.

  • 객체간의 변수의 값을 복사 --> 얕은 복사, 위 경우 new 로 만든 포인터를 공유하게됨.

복사 생성자의 호출 시점은 다음과 같습니다.

  • 객체의 선언과 동시에 초기화 될 때
  • 함수에 매개변수로 객체를 전달할 때 ( Call by Value 경우 )
  • 반환값으로 객체를 반환할 때. --> 여기에 해당하는데 --> 동적할당을 하고 있으므로 깊은 복사가 필요함으로 복사생성자를 만들어주세요.
  • 2016년 04월 24일에 수정됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.
  • 2016년 04월 24일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.

  • 답변 정말 감사합니다. 복사생성자를 추가하니 정상적으로 돌아가네요     윤준상   2016.4.29 16:05     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close