13--8Array数组

 

#include<iostream>
#include<string.h>
#define M 200
using namespace std;
class array
{
public:
	array(int n);
	~array();
	int &operator[](int n);
	array&operator=(array &obj);
	int operator==(array &obj);
	void print();
private:
	int size;
	int *ptr;


};
//   1 实现构造函数,为类array的对象分配一个包含n个数组元素的整型数组
array::array(int n)
{
  int a[M];
  cout<<"输入"<<n<<"个整数:";

  for(int i=0;i<n;i++)
	  cin>>a[i];

  size=n;

  ptr=new int[size+1];            //sizeof(a)

  for(int i=0;i<size;i++)             //ptr=a;可能会出错,反正我的程序出错了,还是安全起见吧
    {
        ptr[i]=a[i];
    }

}


//   2析构函数  撤销对象
array::~array()
{
  delete []ptr;  //数组的撤销方法[]

}


// 3实现[]的重载,a[n]=y;可以为对象数组的第n个元素赋值,函数的实现避免数组越界
int & array::operator [](int n)
{
   if(n>=0&&n<=size)
   {
	   cout<<"[]重载成功!"<<endl;
      return ptr[n];
   }

   else
   {
       cout<<"[]重载不成功!";
	  // return  0;
   }

}


//  4 实现运算符=的重载,是对象之间正确赋值
array & array::operator=(array &obj)
{
	int i;
	 if(*this==obj)                           //很重要
		 return *this;

	 delete []ptr;

	 ptr=new int[size+1];  //整型数组!  不用strlen()!

	   size=obj.size;

    for(i=0;i<size;i++)
	{
        ptr[i]=obj.ptr[i];
    }

  return *this;

}

// 5实现==的重载函数,使之可以判断两个数组是否相等
int array::operator ==(array &obj)
{
	 int count=0,i;

//如果两数组大小相等,继续比较数组元素是否相等。否则不等。
  if(size==obj.size)
  {

	 for(i=0;i<size;i++)
	{
        if(ptr[i]=obj.ptr[i])   //挨个比较数组元素是否相等。相等的话count自增1
			count++;
    }

	 if(count==size)        //若最后count==size说明数组元素相等,否则不等
		 return 2;
	 else
		 return 3;

  }

  else
	  return 3;

}

// print
void array ::print ()
{
   for(int i=0;i<size;i++)
	   cout<<ptr[i]<<" ";

   cout<<endl<<endl;

}

//6  编程测试

int main()
{
  array m(5),n(4),q(6);


  cout<<"m:";
  m.print();

   cout<<"n:";
  n.print();

   cout<<"q:";
  q.print();


   m[1]=17;


   cout<<"m[1]=17.   m:";
     m.print();

    n=(n=q);
    cout<<"把q的值赋给n后,n:";
    n.print();

  if((n==m)==2)
	  cout<<"n,m相等!"<<endl;
  else
	  cout<<"n,m不等!"<<endl;

return 0;

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值