c++ 拷贝构造练习




#include<iostream>
using namespace std;
class Vector
{
private:
	int *dwp;
	int size;
	void clone(const Vector v)
	{
		this->size=v.size;
		this->dwp=new int[size];
		for(int i=0;i<size;i++)
		{
			dwp[i]=v[i];//调用重载下标,相当于this->dwp[i]=v.dwp[i] 
		}
	}
	void dispose()
	{
		delete[] dwp; // 删除指针指向的空间,如果不删除,在调用析构函数的时候只会释放指针本身所占用的内存。 
	}
public:
	//拷贝构造, 
	Vector(const Vector &v)
	{
		clone(v); 
	}
	Vector(int s ):size(s),dwp(new int[s])
	{
		if(size<0)
		   dwp= NULL;
		else
		{
			for(int i=0;i<size;i++)
			{
				dwp[i]=0;
			}
		}
		
	}
	Vector(int *a,int s):size(s),dwp(new int[s])
	{
		for(int i=0;i<size;i++)
		{
			dwp[i]=a[i];
		}
	}
	int get_size()const
	{
		return  size;
	}
	//重载下标。 用于输入。 
	int& operator[](int index)
	{
		return dwp[index];
	}
	//重载下标, 用于输出。加引用的目的是避免产生零时变量,增加开销。 
	const int& operator[](int index) const
	{
		return dwp[index];
	}
	//重载 = 运算符 
	const Vector& operator=(const Vector& v)
	{
		
		if(this!=&v)
		{
			delete []dwp; //删除dwp指向的空间。
			this->size=v.size;
			dwp=new int[size]; //开辟新的空间。 
			for(int i=0;i<size;i++)
			{
				dwp[i]=v[i];
			} 
		} 
	}
	//析构函数 
~Vector()
{
	dispose();
} 
};
//重载输出 
ostream & operator<<(ostream& out,const Vector& v)
{
	int s=v.get_size();
	for(int i=0; i<s;i++)
	{
		out<<v[i]<<endl;
	}
	out<<endl;
	return out;
} 
//重载输入 
istream& operator>>(istream&in,const Vector& v)
{
	int s=v.get_size();
	for(int i=0;i<s;i++)
	{
		in>>v[i];
	}
	return in;
}
int main()
{
	int dwint[3]={1,3,5};
    cout<<"=========v============"<<endl;
	Vector v(dwint,3);
	cout<<v;  //调用重载输出   v.operator() 
	cout<<"=========v2============"<<endl;
	Vector v2(v);
	cout<<v2;
	cout<<v2.get_size();
	
	 
	return 0;
}


posted @ 2013-08-01 19:04  shouqiang Wei  阅读(180)  评论(0编辑  收藏  举报