泰语谢谢怎么说用中文:C++基础题,不会做呀,帮忙!

来源:百度文库 编辑:中科新闻网 时间:2024/05/12 08:11:42
如何重载单目运算符“-”、“++”和双目运算符“+”“-”“*”“/”,试写出其程序。

//ARRAY.H
//简单的类Array
#ifndef ARRAY_H
#define ARRAY_H

#include"iostream.h"

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

private:
int *ptr;//指向数组第一个元素指针
int size;//数组的大小
static int arrayCount;//实例化数组的个数
};
#endif

//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::Array(int arraySize)
{
++arrayCount;//对象计数加1
size=arraySize;//数组默认大小为10
ptr=new int[size];//为数组分配内存空间
assert(ptr!=0);//分配不成功是时中止

for(int i=0;iptr[i]=0;//对数组初始化
}
//
//类Array的拷贝构造函数
Array::Array(const Array &init)
{
++arrayCount;//对象计数加1
size=init.size;//指定对象的大小
ptr=new int[size];//为数组分配内存空间
assert(ptr!=0);//内存空间分配不成功时

for(int i=0;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 return ptr[subscript];//返回的引用可用做左值
}

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

//判断两个数组是否不相等。如不相等,返回1,否则返回0
int Array::operator!=(const Array &right)const
{
if(size!=right.size)
return 1;//数组大小不相等

for(int i=0;iif(ptr[i]!=right.ptr[i])
return 1;//数组不相等
return 0;//数组相等
}

//重载赋值运算符
const Array &Array::operator=(const Array &right)
{
if(&right!=this)//检查是否自我赋值
{delete[]ptr;//回收内存空间
size=right.size;//指定对象的大小
ptr=new int[size];//为数组拷贝分配空间
assert(ptr!=0);//内存分配不成功时中止

for(int i=0;i ptr[i]=right.ptr[i];//把数组拷贝到对象中
}

return *this;//使得能连续执行x=y=z
}
//
//重载用于类Array输入运算符,为整个数组赋值
istream &operator>>(istream &input,Array &a)
{
for(int i=0;iinput>>a.ptr[i];
return input;//使得能连续执行cin>>x>>y
}
//重载用于类Array的输出运算符
ostream &operator<<(ostream &output,const Array &a)
{
for(int i=0;i { output< //建立两个数组并打印数组计数
Array integers1[7],integers2;
cout<<"# of arrays instantialed="
<

//打印数组integers1的大小和内容
cout<<"\n\nSize of array integers1 is"
<<<"\nArray after initialization:\n"
<

//打印数组integers2的大小和内容
cout<<"\n\nSize of Array integer2 is"
<<<"\nArray after initilization:\n"
< //输出并打印integers2和integers1的值
cout<<"\nInput 17 integers:\n";
cin>>integers1>>integers2;
cout<<"After input,the Arrays contain:\n"
<<"integers1:"< <<"integers2:"<//用integers1作为初始化值建立数组integers3
//打印出数组integers3的大小和内容
Array integers3(integers1);

cout<<"\nSize of Array integers3 is"
< <<"\nArray after initialization:\n"
<//
cout<<"\nEvaluating:integers1!=integers2\n";
if(integers1!=integers2)
cout<<"They are not equal\n\n";
//
cout<<"Assigning integers2 to integers1;\n";
integers1=integers2;
cout<<"integers1:"< <<"integers2:"<

//使用重载相等的运算符==
cout<<"\nEvaluating:integers1==integers2\n";
if(integers1==integers2)
cout<<"They are equal\n\n";
//用重载的下标建立右值
cout<<"integers1[5] is"<

//用重载的下标建立左值
cout<<"Assigning 1000 to integers1[5]\n";
integers1[5]=1000;
cout<<"integers1:"<//试图使用下标越界的元素
cout<<"\nAttempt to assign 1000 to integers1[15]\n";
integers1[15]=1000;//错误:下标越界

return 0;
}