C++运算符重载程序

//ARRAY.CPP
//定义类Array的成员函数
#include <iostream.h>
#include <stdlib.h>
#include <assert.h>
#include "Array1.h"

int Array::arrayCount=0; //初始化文件作用域内的静态数据成员
//此时还没生成对象,是在类中定义
int Array::getArrayCount(){return arrayCount;}//初始化静态成员函数,返回实例化的数组
//对象的个数

Array::Array(int arraySize) //定义类Array的默认构造函数
{
++arrayCount; //对象计数加1
size=arraySize; //数组默认大小为10
ptr=new int[size]; //为数组分配内存空间
assert(ptr!=0); //分配不成功是时中止
for(int i=0;i<size;i++){ptr[i]=0;} //对数组初始化
}
Array::Array(const Array &init) //定义类Array的拷贝构造函数
{
++arrayCount; //对象计数加1
size=init.size; //指定对象的大小
ptr=new int[size]; //为数组分配内存空间
assert(ptr!=0); //内存空间分配成功时继续执行
for(int i=0;i<size;i++){ptr[i]=init.ptr[i];} //把初始化值拷贝到对象中
}
Array::~Array() //析构函数
{
--arrayCount; //对象计数减1
delete []ptr; //回收分配给数组的内存空间
}
int Array::getSize()const {return size;} //获取数组的大小
int &Array::operator[](int subscript) //重载下标运算符
{
assert(0<=subscript&&subscript<size); //检测下标运算错误
return ptr[subscript]; //返回的引用可用做左值
}

int Array::operator==(const Array &right)const //判断两个数组是否相等。若相等,
//返回1,否则返回0
{
if(size!=right.size){return 0;} //数组大小不相等
for(int i=0;i<size;i++)
{
if(ptr[i]!=right.ptr[i]){return 0;} //数组不相等
else return 1; //数组相等
}
}

/*int Array::operator!=(const Array &right)const //判断两个数组是否不相等。如不相
//等,返回1,否则返回0
{
if(size!=right.size){return 1;} //数组大小不相等
for(int i=0;i<size;i++)
{
if(ptr[i]!=right.ptr[i]){return 1;} //数组不相等
else return 0; //数组相等
}
*/
Array &Array::operator=(Array &right) //重载赋值运算符
{
if(this!=&right) //检查是否自我赋值
{
delete []ptr; //回收内存空间
size=right.size; //指定对象的大小
ptr=new int[size]; //为数组拷贝分配空间
assert(ptr!=0); //内存分配不成功时中止
for(int i=0;i<size;i++)
ptr[i]=right.ptr[i]; //把数组拷贝到对象中
}
return (*this); //使其能连续执行x=y=z
}

istream &operator>>(istream &input,Array &a) //重载用于类Array的输入运算符,
//为整个数组赋值
{
for(int i=0;i<a.size;i++){input>>a.ptr[i];}
return input; //使其能连续执行cin>>x>>y
}

ostream &operator<<(ostream &output, Array &a) //重载用于类Array的输出运算符
{
for(int i=0;i<a.size;i++){output<<a.ptr[i];} //建立两个数组并打印数组计数
return output;
}
被我改的乱七八糟,那个高手能帮帮忙,让它运行
#include <iostream.h>

class Array
{
public:
Array(int arraySize=10);//默认构造函数
Array(const Array &);//拷贝构造函数
~Array();//析构函数
int getSize() const;//返回数组的大小size
Array & operator=(Array &);//给数组赋值
int operator==(const Array &)const;//比较数组的相等性
int operator!=(const Array &)const;//比较数组的不等性
int &operator[](int);//下标运算符
static int getArrayCount();//返回实例化数组的个数
friend ostream &operator<<(ostream &,Array &);
friend istream &operator>>(istream &,Array &);
private:
int *ptr;//指向数组第一个元素指针
int size;//数组的大小
static int arrayCount;//实例化数组的个数
};

你的Array类建在哪儿的,贴出来噻

#include "Array1.h"

我按你的题加了个类,发现你里面有比较多的错误,现在能运行了,不过你得按你的目的改一下

//ARRAY.CPP
//定义类Array的成员函数
#include <iostream.h>
#include <stdlib.h>
#include <assert.h>
class Array{
private:
int size,*ptr;
public:
static int arrayCount;
int getArrayCount();
Array(int arraySize=10);
Array(const Array &init);
~Array();
int getSize()const;
int &operator[](int);
int operator==(const Array &right)const;
Array &operator=(Array &right);
friend istream &operator>>(istream &input,Array &a);
friend ostream &operator<<(ostream &output, Array &a);
};

int Array::arrayCount=0; //初始化文件作用域内的静态数据成员
//此时还没生成对象,是在类中定义
int Array::getArrayCount(){return arrayCount;}//初始化静态成员函数,返回实例化的数组
//对象的个数

Array::Array(int arraySize) //定义类Array的默认构造函数
{
++arrayCount; //对象计数加1
size=arraySize; //数组默认大小为10
ptr=new int[size]; //为数组分配内存空间
assert(ptr!=0); //分配不成功是时中止
for(int i=0;i<size;i++){ptr[i]=0;} //对数组初始化
}
Array::Array(const Array &init) //定义类Array的拷贝构造函数
{
++arrayCount; //对象计数加1
size=init.size; //指定对象的大小
ptr=new int[size]; //为数组分配内存空间
assert(ptr!=0); //内存空间分配成功时继续执行
for(int i=0;i<size;i++){ptr[i]=init.ptr[i];} //把初始化值拷贝到对象中
}
Array::~Array() //析构函数
{
--arrayCount; //对象计数减1
delete []ptr; //回收分配给数组的内存空间
}
int Array::getSize()const {return size;} //获取数组的大小
int &Array::operator[](int subscript) //重载下标运算符
{
assert(0<=subscript&&subscript<size); //检测下标运算错误
return ptr[subscript]; //返回的引用可用做左值
}

int Array::operator==(const Array &right)const //判断两个数组是否相等。若相等,
//返回1,否则返回0
{
if(size!=right.size){return 0;} //数组大小不相等
for(int i=0;i<size;i++)
{
if(ptr[i]!=right.ptr[i]){return 0;} //数组不相等
}
return 1; //数组相等
}

/*int Array::operator!=(const Array &right)const //判断两个数组是否不相等。如不相
//等,返回1,否则返回0
{
if(size!=right.size){return 1;} //数组大小不相等
for(int i=0;i<size;i++)
{
if(ptr[i]!=right.ptr[i]){return 1;} //数组不相等
else return 0; //数组相等
}
*/
Array &Array::operator=(Array &right) //重载赋值运算符
{
if(this!=&right) //检查是否自我赋值
{
delete []ptr; //回收内存空间
size=right.size; //指定对象的大小
ptr=new int[size]; //为数组拷贝分配空间
assert(ptr!=0); //内存分配不成功时中止
for(int i=0;i<size;i++)
ptr[i]=right.ptr[i]; //把数组拷贝到对象中
}
return (*this); //使其能连续执行x=y=z
}

istream &operator>>(istream &input,Array &a) //重载用于类Array的输入运算符,
//为整个数组赋值
{
for(int i=0;i<a.size;i++){input>>a.ptr[i];}
return input; //使其能连续执行cin>>x>>y
}

ostream &operator<<(ostream &output, Array &a) //重载用于类Array的输出运算符
{
for(int i=0;i<a.size;i++){output<<a.ptr[i];} //建立两个数组并打印数组计数
return output;
}

//主函数*****************************************
int main()
{
Array integers1(7),integers2;
integers1.getSize();
integers2.getSize();
cout<<"\nArray after initilization:\n"<<integers2<<endl;
cin>>integers1>>integers2;
cout<<"integers1:"<<integers1<<endl;
cout<<"integers2:"<<integers2<<endl;
Array integers3(integers1); //用integers1作为初始化值建立数组integers3

integers3.getSize();
cout<<"\nArray after initialization:\n"<<integers3<<endl;

integers1=integers2;
cout<<"integers1:"<<integers1<<endl;
cout<<"integers2:"<<integers2<<endl;

if(integers1==integers2)

cout<<"integers1[5]is"<<integers1[5]<<endl; //用重载的下标建立右值

integers1[5]=1000;
integers1[15]=1000; //错误:下标越界
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-05-28
你的Array类建在哪儿的,贴出来噻
#include
"Array1.h"
我按你的题加了个类,发现你里面有比较多的错误,现在能运行了,不过你得按你的目的改一下
//ARRAY.CPP
//定义类Array的成员函数
#include
<iostream.h>
#include
<stdlib.h>
#include
<assert.h>
class
Array{
private:
int
size,*ptr;
public:
static
int
arrayCount;
int
getArrayCount();
Array(int
arraySize=10);
Array(const
Array
&init);
~Array();
int
getSize()const;
int
&operator[](int);
int
operator==(const
Array
&right)const;
Array
&operator=(Array
&right);
friend
istream
&operator>>(istream
&input,Array
&a);
friend
ostream
&operator<<(ostream
&output,
Array
&a);
};
int
Array::arrayCount=0;
//初始化文件作用域内的静态数据成员
//此时还没生成对象,是在类中定义
int
Array::getArrayCount(){return
arrayCount;}//初始化静态成员函数,返回实例化的数组
//对象的个数
Array::Array(int
arraySize)
//定义类Array的默认构造函数
{
++arrayCount;
//对象计数加1
size=arraySize;
//数组默认大小为10
ptr=new
int[size];
//为数组分配内存空间
assert(ptr!=0);
//分配不成功是时中止
for(int
i=0;i<size;i++){ptr[i]=0;}
//对数组初始化
}
Array::Array(const
Array
&init)
//定义类Array的拷贝构造函数
{
++arrayCount;
//对象计数加1
size=init.size;
//指定对象的大小
ptr=new
int[size];
//为数组分配内存空间
assert(ptr!=0);
//内存空间分配成功时继续执行
for(int
i=0;i<size;i++){ptr[i]=init.ptr[i];}
//把初始化值拷贝到对象中
}
Array::~Array()
//析构函数
{
--arrayCount;
//对象计数减1
delete
[]ptr;
//回收分配给数组的内存空间
}
int
Array::getSize()const
{return
size;}
//获取数组的大小
int
&Array::operator[](int
subscript)
//重载下标运算符
{
assert(0<=subscript&&subscript<size);
//检测下标运算错误
return
ptr[subscript];
//返回的引用可用做左值
}
int
Array::operator==(const
Array
&right)const
//判断两个数组是否相等。若相等,
//返回1,否则返回0
{
if(size!=right.size){return
0;}
//数组大小不相等
for(int
i=0;i<size;i++)
{
if(ptr[i]!=right.ptr[i]){return
0;}
//数组不相等
}
return
1;
//数组相等
}
/*int
Array::operator!=(const
Array
&right)const
//判断两个数组是否不相等。如不相
//等,返回1,否则返回0
{
if(size!=right.size){return
1;}
//数组大小不相等
for(int
i=0;i<size;i++)
{
if(ptr[i]!=right.ptr[i]){return
1;}
//数组不相等
else
return
0;
//数组相等
}
*/
Array
&Array::operator=(Array
&right)
//重载赋值运算符
{
if(this!=&right)
//检查是否自我赋值
{
delete
[]ptr;
//回收内存空间
size=right.size;
//指定对象的大小
ptr=new
int[size];
//为数组拷贝分配空间
assert(ptr!=0);
//内存分配不成功时中止
for(int
i=0;i<size;i++)
ptr[i]=right.ptr[i];
//把数组拷贝到对象中
}
return
(*this);
//使其能连续执行x=y=z
}
istream
&operator>>(istream
&input,Array
&a)
//重载用于类Array的输入运算符,
//为整个数组赋值
{
for(int
i=0;i<a.size;i++){input>>a.ptr[i];}
return
input;
//使其能连续执行cin>>x>>y
}
ostream
&operator<<(ostream
&output,
Array
&a)
//重载用于类Array的输出运算符
{
for(int
i=0;i<a.size;i++){output<<a.ptr[i];}
//建立两个数组并打印数组计数
return
output;
}
//主函数*****************************************
int
main()
{
Array
integers1(7),integers2;
integers1.getSize();
integers2.getSize();
cout<<"\nArray
after
initilization:\n"<<integers2<<endl;
cin>>integers1>>integers2;
cout<<"integers1:"<<integers1<<endl;
cout<<"integers2:"<<integers2<<endl;
Array
integers3(integers1);
//用integers1作为初始化值建立数组integers3
integers3.getSize();
cout<<"\nArray
after
initialization:\n"<<integers3<<endl;
integers1=integers2;
cout<<"integers1:"<<integers1<<endl;
cout<<"integers2:"<<integers2<<endl;
if(integers1==integers2)
cout<<"integers1[5]is"<<integers1[5]<<endl;
//用重载的下标建立右值
integers1[5]=1000;
integers1[15]=1000;
//错误:下标越界
return
0;
}
第2个回答  2020-01-14
你的Array类建在哪儿的,贴出来噻
#include
"Array1.h"
我按你的题加了个类,发现你里面有比较多的错误,现在能运行了,不过你得按你的目的改一下
//ARRAY.CPP
//定义类Array的成员函数
#include
<iostream.h>
#include
<stdlib.h>
#include
<assert.h>
class
Array{
private:
int
size,*ptr;
public:
static
int
arrayCount;
int
getArrayCount();
Array(int
arraySize=10);
Array(const
Array
&init);
~Array();
int
getSize()const;
int
&operator[](int);
int
operator==(const
Array
&right)const;
Array
&operator=(Array
&right);
friend
istream
&operator>>(istream
&input,Array
&a);
friend
ostream
&operator<<(ostream
&output,
Array
&a);
};
int
Array::arrayCount=0;
//初始化文件作用域内的静态数据成员
//此时还没生成对象,是在类中定义
int
Array::getArrayCount(){return
arrayCount;}//初始化静态成员函数,返回实例化的数组
//对象的个数
Array::Array(int
arraySize)
//定义类Array的默认构造函数
{
++arrayCount;
//对象计数加1
size=arraySize;
//数组默认大小为10
ptr=new
int[size];
//为数组分配内存空间
assert(ptr!=0);
//分配不成功是时中止
for(int
i=0;i<size;i++){ptr[i]=0;}
//对数组初始化
}
Array::Array(const
Array
&init)
//定义类Array的拷贝构造函数
{
++arrayCount;
//对象计数加1
size=init.size;
//指定对象的大小
ptr=new
int[size];
//为数组分配内存空间
assert(ptr!=0);
//内存空间分配成功时继续执行
for(int
i=0;i<size;i++){ptr[i]=init.ptr[i];}
//把初始化值拷贝到对象中
}
Array::~Array()
//析构函数
{
--arrayCount;
//对象计数减1
delete
[]ptr;
//回收分配给数组的内存空间
}
int
Array::getSize()const
{return
size;}
//获取数组的大小
int
&Array::operator[](int
subscript)
//重载下标运算符
{
assert(0<=subscript&&subscript<size);
//检测下标运算错误
return
ptr[subscript];
//返回的引用可用做左值
}
int
Array::operator==(const
Array
&right)const
//判断两个数组是否相等。若相等,
//返回1,否则返回0
{
if(size!=right.size){return
0;}
//数组大小不相等
for(int
i=0;i<size;i++)
{
if(ptr[i]!=right.ptr[i]){return
0;}
//数组不相等
}
return
1;
//数组相等
}
/*int
Array::operator!=(const
Array
&right)const
//判断两个数组是否不相等。如不相
//等,返回1,否则返回0
{
if(size!=right.size){return
1;}
//数组大小不相等
for(int
i=0;i<size;i++)
{
if(ptr[i]!=right.ptr[i]){return
1;}
//数组不相等
else
return
0;
//数组相等
}
*/
Array
&Array::operator=(Array
&right)
//重载赋值运算符
{
if(this!=&right)
//检查是否自我赋值
{
delete
[]ptr;
//回收内存空间
size=right.size;
//指定对象的大小
ptr=new
int[size];
//为数组拷贝分配空间
assert(ptr!=0);
//内存分配不成功时中止
for(int
i=0;i<size;i++)
ptr[i]=right.ptr[i];
//把数组拷贝到对象中
}
return
(*this);
//使其能连续执行x=y=z
}
istream
&operator>>(istream
&input,Array
&a)
//重载用于类Array的输入运算符,
//为整个数组赋值
{
for(int
i=0;i<a.size;i++){input>>a.ptr[i];}
return
input;
//使其能连续执行cin>>x>>y
}
ostream
&operator<<(ostream
&output,
Array
&a)
//重载用于类Array的输出运算符
{
for(int
i=0;i<a.size;i++){output<<a.ptr[i];}
//建立两个数组并打印数组计数
return
output;
}
//主函数*****************************************
int
main()
{
Array
integers1(7),integers2;
integers1.getSize();
integers2.getSize();
cout<<"\nArray
after
initilization:\n"<<integers2<<endl;
cin>>integers1>>integers2;
cout<<"integers1:"<<integers1<<endl;
cout<<"integers2:"<<integers2<<endl;
Array
integers3(integers1);
//用integers1作为初始化值建立数组integers3
integers3.getSize();
cout<<"\nArray
after
initialization:\n"<<integers3<<endl;
integers1=integers2;
cout<<"integers1:"<<integers1<<endl;
cout<<"integers2:"<<integers2<<endl;
if(integers1==integers2)
cout<<"integers1[5]is"<<integers1[5]<<endl;
//用重载的下标建立右值
integers1[5]=1000;
integers1[15]=1000;
//错误:下标越界
return
0;
}
第3个回答  2009-09-04
int Array::operator==(const Array &right)const //判断两个数组是否相等。若相等,
//返回1,否则返回0
{
if(size!=right.size){return 0;} //数组大小不相等
for(int i=0;i<size;i++)
{
if(ptr[i]!=right.ptr[i]){return 0;} //数组不相等
}
return 1;
}
就改一个 重载格式不太对 无所谓了 还是可以运行
第4个回答  2009-09-04
注意越界
相似回答