問題:


代碼:#include <iostream>
using namespace std;
struct Vect{
private:
int length=0;
int *arr;
public:
Vect(int n):length(n)
{
arr=new int[length];
for(int i=0;i<n;i++)
{
arr[i]=0;
}
}
Vect():length(5)
{
arr=new int[5];
for(int i=0;i<length;i++)
{
arr[i]=i+1;
}
}
Vect(Vect&v1):length(v1.length),arr(v1.arr){};
void output()
{
int i;
for(i=0;i<length-1;i++)
{
cout<<arr[i]<<" ";
}
cout<<arr[i]<<endl;
}
void reset(int sit,int number)
{
if(length<=sit)
{
cout<<"out of boundary"<<endl;
}else{
arr[sit]=number;
}
}
int Get()
{
return length;
}
~Vect()
{
delete []arr;
}
};
int main()
{
int n;
cin>>n;
Vect v2(n);
Vect v1;
int sit,number;
cin>>sit>>number;
v1.output();
v2.output();
v1.reset(sit,number);
Vect v3(v1);
v1.output();
v3.output();
return 0;
}
uj5u.com熱心網友回復:
Vect(Vect&v1):length(v1.length),arr(v1.arr){};拷貝建構式不對,你這是淺拷貝,你需要把v1的arr復制過來而不是直接指向。
uj5u.com熱心網友回復:
但是深拷貝的函式原型不是X(&X)嗎??,是我的形參串列寫錯了嗎???
uj5u.com熱心網友回復:
// Vect(Vect&v1):length(v1.length),arr(v1.arr){};
Vect(const Vect&v1):length(v1.length)
{
arr=new int[length];
for(int i=0;i<n;i++)
{
arr[i]=v1.arr[i];
}
};
uj5u.com熱心網友回復:
struct Vect{private:
int length=0;
int *arr;
public:
Vect(int n=5):length(n)
{
if ( length > 0)
arr=new int[length];
else
arr = NULL;
for(int i=0;i<n;i++)
{
arr[i]=0;
}
}
Vect(Vect&v1):length(v1.length){
if ( length>0) {
arr = new int[length];
memcpy(arr, v1.arr, v1.length*sizeof(int));
} else
arr = 0;
};
void output()
{
int i;
for(i=0;i<length-1;i++)
{
cout<<arr[i]<<" ";
}
cout<<arr[i]<<endl;
}
。。。。。。
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/118652.html
標籤:C++ 語言
