zoukankan      html  css  js  c++  java
  • 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;
    }


  • 相关阅读:
    vue 封装数据字典项翻译方法
    vue 判断是否为移动端
    elementUI 日期控件
    Laravel 数据库backup 导入/导出
    yarn 安装出现 git 443 网络错误解决思路
    nvm简介
    nrm简介
    npm简介
    python 时间序列学习笔记
    java常见面试题——java常见笔试题
  • 原文地址:https://www.cnblogs.com/wsq724439564/p/3258154.html
Copyright © 2011-2022 走看看