#include<iostream>
#include<cassert>
using namespace std;
class point
{
public:
point():x(0),y(0)
{
cout<<"no number"<<endl;
}
point(int x,int y):x(x),y(y)
{
cout<<"construct"<<endl;
}
//~point(){cout<<"free"<<endl;}
int getx()const{return x;}
int gety()const{return y;}
void move(int nx,int ny)
{
x=nx;
y=ny;
}
private:
int x,y;
};
//动态数组类
class arrayofpoints{
public:
arrayofpoints(int size):size(size)
{
points=new point[size];
}
~arrayofpoints()
{
cout<<"delete free"<<endl;
delete []points;
}
point &element(int index)
{
assert(index>=0&&index<size);//判断数组下标是否越界,若越界则终止
return points[index];
}
arrayofpoints(const arrayofpoints &v);//比浅复制多的
private:
point *points;//指向动态数组首地址
int size;//数组大小
};
//比浅复制多的
arrayofpoints::arrayofpoints(const arrayofpoints &v)
{
size=v.size;
points=new point[size];
for(int i=0;i<size;i++)
points[i]=v.points[i];
}
int main()
{
int count=2;
arrayofpoints a(count);
a.element(0).move(5,10);
a.element(1).move(15,20);
arrayofpoints b=a;
cout<<b.element(0).getx()<<","<<b.element(0).gety()<<endl;
cout<<b.element(1).getx()<<","<<b.element(1).gety()<<endl;
a.element(0).move(25,30);//当a变化b不变化
a.element(1).move(35,40);
cout<<b.element(0).getx()<<","<<b.element(0).gety()<<endl;
cout<<b.element(1).getx()<<","<<b.element(1).gety()<<endl;
return 0;
}