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


  • 相关阅读:
    一个简单的loading,纯属自娱自乐
    sql server CTE递归使用测试
    sql-删除无效sql链接
    sql-按周输出每月的周日期范围
    sql-计算每个月星期几有几天
    sql-GOTO跳转
    回滚与撤销
    数据库事务
    mysql 海量数据的存储和访问解决方案
    数据库范式
  • 原文地址:https://www.cnblogs.com/wsq724439564/p/3258154.html
Copyright © 2020-2023  润新知