一个我研究了很多天,却不能解决的问题!关于不等二维数组之间的赋值(使用运算符重载)
下面是源代码,用vc6.0编译通过,但运行时总是提示赋值操作有问题(我用运算符重载实现的)!
首先是头文件
#ifndef ARRAY_H
#define ARRAY_H
#include <iostream.h>
class DoubleSubscriptedArray
{
friend ostream &operator<< (ostream &, const DoubleSubscriptedArray &);
friend istream &operator>> (istream &, DoubleSubscriptedArray &);
int **ptr;
int size;
int y;
int x;
public:
DoubleSubscriptedArray( int , int );
~DoubleSubscriptedArray();
int access(int ,int) const;
const DoubleSubscriptedArray &operator= (const DoubleSubscriptedArray &);
int operator== (const DoubleSubscriptedArray &) const;
int operator!= (const DoubleSubscriptedArray &) const;
int &operator [] (int);
};
#endif
//然后是函数的定义部分
//注意:重载的=有问题,关键问题就在 重载的‘=’上。
#include <iostream.h>
#include <stdlib.h>
#include <assert.h>
#include "array.h"
DoubleSubscriptedArray:: DoubleSubscriptedArray(int m,int n)
{
x=m;
y=n;
size =x*y;
ptr=new int *[x];
for(int j=0;j<y;j++)
ptr[j]=new int[y];
/* assert(ptr!=0);
for(int k=0;k<m;k++)
for(int l=0;l<n;l++)
ptr [k][l] =0;
*/
}
DoubleSubscriptedArray::~DoubleSubscriptedArray()
{
for(int h =0; h < x; h++)
delete []ptr[h];
delete []ptr;
}
int DoubleSubscriptedArray:: access(int a,int b) const
{
return ptr[a][b];
}
int DoubleSubscriptedArray:: operator== (const DoubleSubscriptedArray &right) const
{
if(size!=right.size || x!=right.x || y!=right.y)
return 0;
for(int i=0;i<x;i++)
for(int j=0;j<y;j++)
if(ptr[i][j] != right.ptr[i][j])
return 0;
return 1;
}
int DoubleSubscriptedArray::operator != (const DoubleSubscriptedArray &right) const
{
if(size!=right.size || x!=right.x || y!=right.y)
return 1;
for (int i=0;i<x;i++)
for(int j=0; j<y; j++)
if(ptr[i][j]!= right.ptr[i][j])
return 1;
return 0;
}
//问题基本上出在这块里面:
//我苦想研究了许多天也没有解决
const DoubleSubscriptedArray &DoubleSubscriptedArray:: operator= (const DoubleSubscriptedArray &right)
{
if(&right!= this) {
for(int h =0; h < x; h++)
delete [] ptr[h];
delete [] ptr;
x=right.x;
y=right.y;
ptr=new int*[right.x];
for(int k=0; k<right.x; k++)
ptr[k] = new int[right.y];
// assert(ptr!=0);
for(int i=0;i<x;i++)
for(int j=0;j<y;j++)
ptr[i][j] = right.ptr[i][j];
}
return *this;
}
istream &operator>> (istream &input, DoubleSubscriptedArray &a)
{
for(int i=0;i<a.x;i++)
for(int j=0;j<a.y;j++)
input>>a.ptr[i][j];
return input;
}
ostream &operator<< (ostream &output, const DoubleSubscriptedArray &a)
{
for(int i=0;i<a.x;i++)
for(int j=0;j<a.y;j++)
{
output<<a.ptr[i][j]<<' ';
if(j==(a.y-1))
output<<endl<<" ";
}
return output;
}
//下面就是测试主程序啦
//大家看看!
#include <iostream.h>
#include "array.h"
void main()
{
DoubleSubscriptedArray a1(2,3),a2(2,2);
cout<<"input 10 intgers"<<endl;
cin>>a1>>a2;
cout<<"a1:"<<a1<<endl;
cout<<"a2:"<<a2<<endl;
cout<<"a2(0,0)="<<a2.access(0,0)<<endl;
if(a1!=a2)
cout<<"the are not equal!"<<endl;
a1=a2;
cout<<"a1:"<<a1<<endl;
cout<<"a2:"<<a2<<endl;
if(a1==a2)
cout<<"the are equal!"<<endl;
}
各位兄弟,可以将代码运行检查一下,我研究一周!我实在没有办法弄出问题在哪里?
跪求高手!必将分送给解答正确的那位!