#include<iostream>
using namespace std;
class set
{
private:
int *num;
int index;
int size;
public:
set(int s = 0)
{
size = s;
num = new int[size];
index = 0;
}
~set() { delete[] num; }
void setnum()
{
for (int i = 0; i < this->size; i++)
{
cin >> this->num[this->index];
this->index++;
}
}
set operator+(const int& a)
{
for (int i = 0; i < size; i++)
{
if (num[i] == a)
return *this;
}
set s(size + 1);
for (int i = 0; i < size; i++)
{
s.num[i] = num[i];
s.index++;
}
s.num[size] = a;
s.print();
return s;
}
void print()
{
for (int i = 0; i < size; i++)
{
cout << num[i] << " ";
}
cout << endl;
}
};
int main()
{
int size, a;
cout << "크기 입력";
cin >> size;
set s1(size);
s1.setnum();
set s2 = s1 + 3;
s2.print();
cout << "끝" << endl;
return 0;
}
멤버함수 operator+에서 return s;를 했는데 메인문에 있는 s2.print()를 하면 동작하지않고 디버그 어설션 오류가 뜹니다 s1.print()로 했을 때 오류가 안뜨는걸 봐서는 operator+에서 return s;가 동작하지 않는 것 같은데 어떻게 고쳐야할지 감이 안잡힙니다.
s2 = s1+3 에서 얕은복사가 일어나네요 return *this; 여기에서 임시객체를 반환하고있고 임시객체는 소멸하면서 delete num[]하죠 s2는 삭제된 num[]값을 복사받는거같습니다. operation = 도 따로해주셔서 깊은복사를 해주셔야할듯
감사합니다