第十四周实验报告一

  1. 程序的版权和版本声明部分 
  2. * Copyright (c) 2011, 烟台大学计算机学院学生 
  3. * All rights reserved. 
  4. * 文件名称: 
  5. * 作者:李君凯 
  6. * 完成日期: 2012年 5月 28日
  7. * 版本号: 
  8. *对任务及求解方法的描述部分
  9. #include <iostream> 
    using namespace std;
    class MyArray
    {
    private:
    	int *arr;		//用于存放动态分配的数组内存首地址
    	int size;		//数组大小
    public:
    	MyArray(int sz=50);
    	MyArray(int a[],int sz);	//由一个内置类型的数组初始化
    	MyArray(const MyArray &A);	//拷贝构造函数
    	~MyArray(void);				//析构函数,注意释放空间
    	MyArray&operator =(const MyArray &A); //重载“=”使得数组对象可以整体赋值
    	int& operator[](int i);		//重载[],使得Array对象也可以如C++普通数组一样,用a[i]形式取出值【选做】
    	bool operator == (MyArray& A);	//重载==,使得Array对象能整体判断两个数组是否相等(size相等且对应元素相等)
    	MyArray operator + (MyArray& A);	//重载+,使两个Array对象可以整体相加(前提大小相等)【选做】
    	friend ostream& operator << (ostream& out,MyArray& A);	//重载<<,输出数组
    	int GetSize(void)const;	//取数组大小;
    	void Resize(int sz);	//修改数组的大小,如果sz大于数组的原大小,增加的元素初始为;sz小于数组的原大小,舍弃后面的元素【选做】
    };
    MyArray::MyArray(int sz) 
    {
    	arr=new int[sz];
    	size=sz;
    	for(int i=0;i<sz;i++)
    		arr[i]=0;
    }
    MyArray::MyArray(int a[],int sz)
    {
    	arr=new int[sz];
    	size=sz;
    	for(int i=0;i<sz;i++)
    		*(arr+i)=*(a+i);
    	
    }
    MyArray::MyArray(const MyArray &A)
    {
    	arr=new int[A.size ];
    	for(int i=0;i<A.size ;i++)
    		*(arr+i)=*(A.arr +i);
    	size=A.size;
    }
    
    MyArray::~MyArray(void)
    {
    	delete []arr;
    }
    
    MyArray &MyArray::operator =(const MyArray &A)
    {
    	arr=new int[A.size ];
    	for(int i=0;i<A.size;i++)
    		*(arr+i)=*(A.arr+i);
    	size=A.size ;
    	return *this;
    }
    int &MyArray:: operator[](int i)//重载[],使得Array对象也可以如C++普通数组一样,用a[i]形式取出值【选做】
    {  
        if(i > size)  
        {  
    	  cout << "数组角标越界" << endl;  
            exit(0);  
        }  
        else  
        {         
    	    return *(arr + i);   
        }  
    }
    bool MyArray::operator ==(MyArray &A)
    {
    	if(size==A.size )
    	{
    		for(int i=0;i<size;i++)
    		{
    			if(arr[i]!=A.arr[i])
    			return false;
    		}
    		return true;
    	}
    	else 
    		return false;
    }
    MyArray MyArray::operator + (MyArray& A)	//重载+,使两个Array对象可以整体相加(前提大小相等)【选做】
    {  
        MyArray My(A);   
        if(size != A.size)  
        {  
           cout << "数组元素个数不同,无法相加。" << endl;  
        }  
        else  
        {  
            for(int i = 0; i < size; ++i)    
           {    
                *(My.arr + i) = *(arr + i) + *(A.arr+i);    
           }   
            return My;  
        }  
          
    } 
    ostream& operator << (ostream& out,MyArray& A)
    {
    	for(int i=0;i<A.size ;i++)
    	{
    		out<<*(A.arr+i)<<" ";
    	}
    	out<<endl;
    	return out;
    }
    int MyArray:: GetSize(void)const
    {
    	return size;
    }
    
    void MyArray::Resize(int sz)    //修改数组的大小,如果sz大于数组的原大小,增加的元素初始为;sz小于数组的原大小,舍弃后面的元素【选做】   
    {  
        int *m,i;   
        m = new int[sz];  
        if(sz > size)    
        {       
            for( i = 0; i < size; ++i)    
                *(m + i) = *(arr + i);    
            for(i = size; i < sz; ++i)    
                *(m + i) = 0;     
        }    
        else    
        {     
            for(i = 0; i < sz; ++i)    
                *(m + i) = *(arr + i);        
        }   
        arr = new int[sz];  
        for(i = 0;i < sz; ++i)    
            *(arr + i) = *(m + i);    
        size = sz;  
    }  
    
    int main()
    {
    	int a[10]={1,2,3,4,5,6,7,8,9,10};
    	int b[10]={4,5,6,7,8,9,10,11,12,13};
    	MyArray arr1(a,10);
    	MyArray arr2(b,10);
    	MyArray arr3(10);
    	cout<<arr3;
    	arr3 = arr1 +arr2;
    	cout<<arr3;
    	arr3.Resize(20);
    	cout<<arr3;
    	arr3.Resize(5);
    	cout<<arr3;
    	system("pause");
    	return 0;
    } 
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值