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; }