Extern ofstream fo;

VEC::VEC():ne(0),v(NULL)

{fo<<"VEC() n"; }

VEC::VEC(int n) : ne(n), v(new double[n])

{fo<<"cst1 "<<this<<' '<<v<<endl;}

VEC :: VEC (VEC& a) //К-р инициализирует чистую память

{int i; ne=a.ne;

v=new double[ne];

for (i=0; i<ne; i++) v[i] = a.v[i];

//*this=a; // это копирование здесь не работает (поверхностное)

//Объект а:

//а. ne; a.v-–>                

// this->v=a.v; эта ссылка будет неопред., если а будет удалено.

//this->ne=a.ne; Здесь необходимо копирование глубинное.

fo<<"VEC(VEC& a)-cst2"<<this<<' '<<v<<endl; }

VEC::~VEC()

{fo<<"~VEC()dst "<<this<<' '<<v<<endl;

delete []v; }

double& VEC::operator [] (int i)

{if (i<0||i>=ne){fo<<"index is out of diapazon"<<endl; exit (0);}

return v[i];}

 

VEC& VEC::operator = (VEC& y)

{int i; fo<< "VEC::operator=(VEC& y)"<<this<<' '<<v<<endl;

if(y.ne!=ne){ delete [] v;

ne=y.ne; v=new double[ne];

for(i=0; i<ne; i++) v[i]=y.v[i];}

else if(this!=&y) for(i=0; i<ne; i++) v[i]=y.v[i];

return *this;

}

 

 

VEC VEC::operator+(VEC& y)

{int i, nm, p;

//fo<<"VEC::operator+(VEC& y)"<<this<<' '<<&y<<endl;

nm=y.ne;p=0; if(ne>nm) {nm=ne;p=1;}

VEC z(nm); //VEC* z = new VEC(nm); чтобы работало с &

if(p){z=*this;

for(i=0;i<y.ne;i++)

z.v[i]=z.v[i]+y.v[i];}

else {z=y;for(i=0;i<ne;i++)z.v[i]=z.v[i]+v[i];}