C++,问题重载+号使两个数组相加时为他们的并集,下面的代码错在哪里了?球改正!
#include<iostream>usingnamespacestd;classAdd{int*a;intsize;public:Add(constAdd&B){siz...
#include<iostream>
using namespace std;
class Add
{
int*a;
int size;
public:
Add(const Add&B)
{
size=B.size;
a=new int[size];
}
int SIZE(){return size;}
Add(int size=0,int init=0)
{
this->size=size;
a=new int[size];
for(int i=0;i<this->size;i++)
{
a[i]=init;
}
}
Add()
{
a=NULL;
size=0;
}
~Add()
{
delete[]a;
}
void SetValue(int i=0,int value=0)
{
a[i]=value;
}
Add operator+(const Add&obj);
void Show();
};
Add Add::operator +(const Add&obj)
{
if(obj.a)
{
Add C;
C.size=size+obj.size;
C.a=new int [C.size];
for(int i=0;i<size;i++)
{
C.a[i]=a[i];
}
for(int j=0;j<obj.size;j++)
{
C.a[i+j]=obj.a[j];
}
return C;
}
}
void Add::Show()
{
for(int i=0;i<size;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
int main()
{
Add A(5,0),B(5,3);
for(int i=0;i<A.SIZE();i++)
{
int a;
cin>>a;
A.SetValue(i,a);
}
for(i=0;i<B.SIZE();i++)
{
int b;
cin>>b;
B.SetValue(i,b);
}
Add C;
C=A+B;
C.Show();
} 展开
using namespace std;
class Add
{
int*a;
int size;
public:
Add(const Add&B)
{
size=B.size;
a=new int[size];
}
int SIZE(){return size;}
Add(int size=0,int init=0)
{
this->size=size;
a=new int[size];
for(int i=0;i<this->size;i++)
{
a[i]=init;
}
}
Add()
{
a=NULL;
size=0;
}
~Add()
{
delete[]a;
}
void SetValue(int i=0,int value=0)
{
a[i]=value;
}
Add operator+(const Add&obj);
void Show();
};
Add Add::operator +(const Add&obj)
{
if(obj.a)
{
Add C;
C.size=size+obj.size;
C.a=new int [C.size];
for(int i=0;i<size;i++)
{
C.a[i]=a[i];
}
for(int j=0;j<obj.size;j++)
{
C.a[i+j]=obj.a[j];
}
return C;
}
}
void Add::Show()
{
for(int i=0;i<size;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
int main()
{
Add A(5,0),B(5,3);
for(int i=0;i<A.SIZE();i++)
{
int a;
cin>>a;
A.SetValue(i,a);
}
for(i=0;i<B.SIZE();i++)
{
int b;
cin>>b;
B.SetValue(i,b);
}
Add C;
C=A+B;
C.Show();
} 展开
展开全部
这样?:
#include<iostream>
using namespace std;
class Add
{
int*a;
int size;
public:
Add(const Add&B)
{
if (&B != this)
{
size = B.size;
a = new int[size];//需要赋值吧
for (int index = 0; index < size; ++index)
{
a[index] = B.a[index];
}
}
}
Add operator=(const Add&B)//重载赋值操作符
{
if (&B != this)
{
delete[]a;
size = B.size;
a = new int[size];//需要赋值吧
for (int index = 0; index < size; ++index)
{
a[index] = B.a[index];
}
}
return *this;
}
int SIZE(){ return size; }
Add(int size = 0, int init = 0)
{
this->size = size;
a = new int[size];
if (size == 0)
a = nullptr;
for (int i = 0; i < this->size; i++)
{
a[i] = init;
}
}
// Add()//你含两个默认参数的构造函数和这个冲突了
// {
// a = NULL;
// size = 0;
// }
~Add()
{
delete[]a;
}
void SetValue(int i = 0, int value = 0)
{
a[i] = value;
}
Add operator+(const Add&obj);
void Show();
};
Add Add::operator +(const Add&obj)
{
if (obj.a)
{
Add C;
C.size = size + obj.size;
C.a = new int[C.size];
int i = 0;//提到这。。
for (; i < size; i++)
{
C.a[i] = a[i];
}
for (int j = 0; j < obj.size; j++)
{
C.a[i + j] = obj.a[j];
}
return C;//会调用拷贝构造函数
}
}
void Add::Show()
{
for (int i = 0; i < size; i++)
{
cout << a[i] << " ";
}
cout << endl;
}
int main()
{
Add A(5, 0), B(5, 3);
for (int i = 0; i < A.SIZE(); i++)
{
int a;
cin >> a;
A.SetValue(i, a);
}
for (int i = 0; i < B.SIZE(); i++)//c++风格的for循环第一块语句定义的变量只for循环内有效
{
int b;
cin >> b;
B.SetValue(i, b);
}
Add C;
C = A + B;//这里用到赋值操作符
C.Show();
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询