c++ 拷贝构造练习

来源:互联网 发布:细骨料试验记录数据 编辑:程序博客网 时间:2024/06/06 03:26




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