#include <iostream>
#include <string.h>
using namespace std;
class Vector{
int n;
int *arr;
public:
Vector(int num=0):n(num)
{
arr=new int[n];
for(int i=0;i<n;i++)
{
arr[i]=0;
}
}
Vector(const Vector &Vec):n(Vec.n)
{
arr=new int [n];
memcpy(arr,Vec.arr,n*sizeof(int));
}
~Vector(){delete []arr;}
friend ostream &operator<<(ostream &os,const Vector &Vec);
friend istream &operator>>(istream &is, Vector &Vec);
};
ostream &operator<<(ostream &os,const Vector &Vec)
{
int i;
for(i=0;i<Vec.n-1;i++)
{
os<<Vec.arr[i];
os<<" ";
}
os<<Vec.arr[i];
return os;
}
istream &operator>>(istream &is, Vector &Vec)
{
for(int i=0;i<Vec.n;i++)
{
is>>Vec.arr[i];
}
return is;
}
int main()
{
int num;
cin>>num;
Vector vec1(num);
cout<<vec1<<endl;
cin>>vec1;
cout<<vec1<<endl;
const Vector vec2=vec1;
cout<<vec2<<endl;
Vector vec3(num);
vec3=vec2;
cout<<vec3<<endl;
return 0;
}
那里出問題了呢
到底哪里記憶體超限了………
uj5u.com熱心網友回復:
Vector(int num=0):n(num)
{
arr=new int[n]; // n ==0時,無意義
for(int i=0;i<n;i++)
{
arr[i]=0;
}
}
Vector(const Vector &Vec):n(Vec.n)
{
arr=new int [n]; // n ==0時,無意義
memcpy(arr,Vec.arr,n*sizeof(int));
}
uj5u.com熱心網友回復:
你沒有提供operator=,所以出錯uj5u.com熱心網友回復:
vec1=vec2不是直接呼叫拷貝函式嗎,還要多載一下這個運算子嗎
uj5u.com熱心網友回復:
但是改完以后還是會顯示記憶體超限
uj5u.com熱心網友回復:
初始化才會呼叫建構式,賦值呼叫的是operstor=
uj5u.com熱心網友回復:
那這個會導致記憶體超限嗎?我不是很懂這兩者之間的聯系uj5u.com熱心網友回復:
超不超?是你一直再說。具體如何,我不知道。我只知道你不實作operator= ,必然會出錯。
uj5u.com熱心網友回復:
超不超?是你一直再說。具體如何,我不知道。
我只知道你不實作operator= ,必然會出錯。
嗯,好的,我把這個地方改一改再試試,謝謝啦??
uj5u.com熱心網友回復:
new x[n]是c++什么版本的語法?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/107143.html
標籤:C++ 語言
上一篇:全部都用c++
