此例子2重载了一些基本的运算符,返回的是int或bool型的
//Array.h
#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 = 10);
Array(const Array&);//拷贝构造函数
~Array();
int getSize();
const bool operator == (const Array &);//重载==
const bool operator != (const Array &);//重载!=
int &operator [] (int);//重载[]
private:
int size;
int *ptr;
};
#endif
//Array.cpp
#include "Array.h"
#include<stdlib.h>
Array::Array(int n)
{
size = n;
ptr = new int [size];
for (int i=0;i<size;i++)
ptr[i] = 0;
}
Array::Array(const Array& array)
{
if (size!=array.size)
{
delete [] ptr;
size = array.size;
ptr = new int [size];
}
for (int i=0;i<size;i++)
ptr[i] = array.ptr[i];
}
Array::~Array()
{
delete [] ptr;
}
int Array::getSize()
{
return size;
}
const bool Array::operator == (const Array &array)
{
if (size != array.size)
return false;
else
for (int i=0;i<size;i++)
if (ptr[i]!=array.ptr[i])
return false;
return true;
}
const bool Array::operator != (const Array &array)
{
return !(*this == array);//perfect!!!!!!!
}
int& Array::operator [] (int num)
{
if (num<0||num>=size)
{
cout<<"out of range"<<endl;
exit(1);
}
else
return ptr[num];
}
ostream &operator<<(ostream &output, const Array &array)
{
for (int i=0;i<array.size;i++)
output<<array.ptr[i]<<" ";
cout<<endl;
return output;
}
istream &operator>>(istream &input, Array &array)
{
cout<<"size is "<<array.size<<endl;
for (int i=0;i<array.size;i++)
input>>array.ptr[i];
return input;
}
//run.cpp
#include "Array.h"
#include<iostream.h>
void main()
{
Array array1(7);
Array array2;
cout<<"size of array1 is "<<array1.getSize()<<endl;
cout<<"size of array2 is "<<array2.getSize()<<endl;
cin>>array1;
cin>>array2;
cout<<"array1:"<<endl<<array1<<endl;
cout<<"array2:"<<endl<<array2<<endl;
if (array1!=array2)
cout<<"not equal"<<endl;
int num;
cin>>num;
cout<<array1[num]<<endl;
/*........*/
}
可以任意增加代码来测试的程序
重载 ==,!=等等类似的运算符可以使程序更加容易理解。实际上个人认为没有太大的用处,不过学习c++这些可是必不可少的东西。以前没怎么认真学习过,只有现在努力啦,呵呵。
//Array.h
#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 = 10);
Array(const Array&);//拷贝构造函数
~Array();
int getSize();
const bool operator == (const Array &);//重载==
const bool operator != (const Array &);//重载!=
int &operator [] (int);//重载[]
private:
int size;
int *ptr;
};
#endif
//Array.cpp
#include "Array.h"
#include<stdlib.h>
Array::Array(int n)
{
size = n;
ptr = new int [size];
for (int i=0;i<size;i++)
ptr[i] = 0;
}
Array::Array(const Array& array)
{
if (size!=array.size)
{
delete [] ptr;
size = array.size;
ptr = new int [size];
}
for (int i=0;i<size;i++)
ptr[i] = array.ptr[i];
}
Array::~Array()
{
delete [] ptr;
}
int Array::getSize()
{
return size;
}
const bool Array::operator == (const Array &array)
{
if (size != array.size)
return false;
else
for (int i=0;i<size;i++)
if (ptr[i]!=array.ptr[i])
return false;
return true;
}
const bool Array::operator != (const Array &array)
{
return !(*this == array);//perfect!!!!!!!
}
int& Array::operator [] (int num)
{
if (num<0||num>=size)
{
cout<<"out of range"<<endl;
exit(1);
}
else
return ptr[num];
}
ostream &operator<<(ostream &output, const Array &array)
{
for (int i=0;i<array.size;i++)
output<<array.ptr[i]<<" ";
cout<<endl;
return output;
}
istream &operator>>(istream &input, Array &array)
{
cout<<"size is "<<array.size<<endl;
for (int i=0;i<array.size;i++)
input>>array.ptr[i];
return input;
}
//run.cpp
#include "Array.h"
#include<iostream.h>
void main()
{
Array array1(7);
Array array2;
cout<<"size of array1 is "<<array1.getSize()<<endl;
cout<<"size of array2 is "<<array2.getSize()<<endl;
cin>>array1;
cin>>array2;
cout<<"array1:"<<endl<<array1<<endl;
cout<<"array2:"<<endl<<array2<<endl;
if (array1!=array2)
cout<<"not equal"<<endl;
int num;
cin>>num;
cout<<array1[num]<<endl;
/*........*/
}
可以任意增加代码来测试的程序
重载 ==,!=等等类似的运算符可以使程序更加容易理解。实际上个人认为没有太大的用处,不过学习c++这些可是必不可少的东西。以前没怎么认真学习过,只有现在努力啦,呵呵。