再读C++ Primer 写了个小例子——运算符重载
#pragma
once
#define MAX 20
class Array
... {
public:
Array(void);
~Array(void);
Array(int n);
Array& operator+(const Array& array);
Array& operator-(const Array& array);
Array& operator*(int n);
Array& operator()(int n);
int operator==(const Array &array);
int& operator[](int nIndex);
public:
int* m_pData;
int m_nCount;
} ;
#include " StdAfx.h "
#include " .array.h "
#include " crtdbg.h "
using namespace std;
Array::Array( void )
... {
m_pData= new int[10];
m_nCount = 10;
for(int i=0;i<10;i++)
...{
m_pData[i]=0;
}
}
Array:: ~ Array( void )
... {
if(m_pData !=NULL)
...{
delete[] m_pData;
m_pData = NULL;
}
}
Array::Array( int n)
... {
_ASSERT(n > 0);
m_pData =new int[n];
m_nCount = n;
for(int i=0;i<n;i++)
...{
m_pData[i]=n;
}
}
Array & Array:: operator + ( const Array & array)
... {
int i;
if(this->m_nCount <= array.m_nCount)
...{
int i;
for(i = 0;i < this->m_nCount;i++)
...{
this->m_pData[i]+=array.m_pData[i];
}
}
else
...{
for(i = 0;i < array.m_nCount;i++)
...{
this->m_pData[i]+=array.m_pData[i];
}
for(;i<this->m_nCount;i++)
...{
this->m_pData[i]=0;
}
}
return *this;
}
Array & Array:: operator - ( const Array & array)
... {
int i;
if(this->m_nCount <= array.m_nCount)
...{
for(i = 0;i < this->m_nCount;i++)
...{
this->m_pData[i]-=array.m_pData[i];
}
}
else
...{
for(i = 0;i < array.m_nCount;i++)
...{
this->m_pData[i]-=array.m_pData[i];
}
for(;i<this->m_nCount;i++)
...{
this->m_pData[i]=0;
}
}
return *this;
}
int Array:: operator == ( const Array & array)
... {
if(this->m_nCount != array.m_nCount)
...{
cout<<"a != b return:";
return 0;
}
else
...{
for(int i=0;i<array.m_nCount;i++)
...{
if(this->m_pData[i] != array.m_pData[i])
...{
cout<<"a != b return: ";
return 0;
}
}
cout<<"a == b return: ";
return 1;
}
}
Array & Array:: operator * ( int n)
... {
Array* temp = new Array(this->m_nCount);
temp->m_nCount=this->m_nCount;
for(int i = 0; i < this->m_nCount; i++)
...{
temp->m_pData[i] = this->m_pData[i] * n;
}
return *temp;
}
Array & Array:: operator ()( int n)
... {
for(int i = 0; i < this->m_nCount; i++)
...{
this->m_pData[i] = n;
}
return *this;
}
int & Array:: operator []( int nIndex)
... {
if(nIndex < 0 || nIndex > this->m_nCount)
...{
cout<<"error"<<endl;
}
return this->m_pData[nIndex];
}
// class08011701.cpp : Defines the entry point for the console application.
//
#include " stdafx.h "
#include " Array.h "
using namespace std;
int _tmain( int argc, _TCHAR * argv[])
... {
Array ar1(10);
ar1.operator ()(5);
cout<<"()重载"<<endl;
for(int i=0;i<ar1.m_nCount;i++)
...{
cout<<ar1.m_pData[i]<<" ";
}
cout<<endl;
cout<<"------------------"<<endl;
Array ar2(15);
Array ar3(25);
Array ar4(25);
// Array ar2(2);
// cout<<ar2.m_pData<<endl;
ar2.operator +(ar1);
cout<<"+重载"<<endl;
for(int i=0;i<ar2.m_nCount;i++)
...{
cout<<ar2.m_pData[i]<<" ";
}
cout<<endl;
cout<<"------------------"<<endl;
ar1=ar1-ar2;
cout<<"-重载"<<endl;
for(int i=0;i<ar1.m_nCount;i++)
...{
cout<<ar1.m_pData[i]<<" ";
}
cout<<"------------------"<<endl;
cout<<endl;
cout<<"[]重载"<<endl;
cout<<ar1.operator [](5)<<endl;
cout<<"------------------"<<endl;
// cout<<ar1[20]<<endl;
cout<<"==重载"<<endl;
cout<<ar3.operator ==(ar2)<<endl;
cout<<(ar3 == ar4)<<endl;
cout<<"------------------"<<endl;
Array ar5;
ar5= ar3.operator *(5);
cout<<"*重载"<<endl;
for(int i = 0;i<ar5.m_nCount;i++)
...{
cout<<ar5.m_pData[i]<<" ";
}
cout<<endl;
cout<<"------------------"<<endl;
Array& ar6 = ar1 + ar2;
int a;
cin>>a;
return 0;
}
#define MAX 20
class Array
... {
public:
Array(void);
~Array(void);
Array(int n);
Array& operator+(const Array& array);
Array& operator-(const Array& array);
Array& operator*(int n);
Array& operator()(int n);
int operator==(const Array &array);
int& operator[](int nIndex);
public:
int* m_pData;
int m_nCount;
} ;
#include " StdAfx.h "
#include " .array.h "
#include " crtdbg.h "
using namespace std;
Array::Array( void )
... {
m_pData= new int[10];
m_nCount = 10;
for(int i=0;i<10;i++)
...{
m_pData[i]=0;
}
}
Array:: ~ Array( void )
... {
if(m_pData !=NULL)
...{
delete[] m_pData;
m_pData = NULL;
}
}
Array::Array( int n)
... {
_ASSERT(n > 0);
m_pData =new int[n];
m_nCount = n;
for(int i=0;i<n;i++)
...{
m_pData[i]=n;
}
}
Array & Array:: operator + ( const Array & array)
... {
int i;
if(this->m_nCount <= array.m_nCount)
...{
int i;
for(i = 0;i < this->m_nCount;i++)
...{
this->m_pData[i]+=array.m_pData[i];
}
}
else
...{
for(i = 0;i < array.m_nCount;i++)
...{
this->m_pData[i]+=array.m_pData[i];
}
for(;i<this->m_nCount;i++)
...{
this->m_pData[i]=0;
}
}
return *this;
}
Array & Array:: operator - ( const Array & array)
... {
int i;
if(this->m_nCount <= array.m_nCount)
...{
for(i = 0;i < this->m_nCount;i++)
...{
this->m_pData[i]-=array.m_pData[i];
}
}
else
...{
for(i = 0;i < array.m_nCount;i++)
...{
this->m_pData[i]-=array.m_pData[i];
}
for(;i<this->m_nCount;i++)
...{
this->m_pData[i]=0;
}
}
return *this;
}
int Array:: operator == ( const Array & array)
... {
if(this->m_nCount != array.m_nCount)
...{
cout<<"a != b return:";
return 0;
}
else
...{
for(int i=0;i<array.m_nCount;i++)
...{
if(this->m_pData[i] != array.m_pData[i])
...{
cout<<"a != b return: ";
return 0;
}
}
cout<<"a == b return: ";
return 1;
}
}
Array & Array:: operator * ( int n)
... {
Array* temp = new Array(this->m_nCount);
temp->m_nCount=this->m_nCount;
for(int i = 0; i < this->m_nCount; i++)
...{
temp->m_pData[i] = this->m_pData[i] * n;
}
return *temp;
}
Array & Array:: operator ()( int n)
... {
for(int i = 0; i < this->m_nCount; i++)
...{
this->m_pData[i] = n;
}
return *this;
}
int & Array:: operator []( int nIndex)
... {
if(nIndex < 0 || nIndex > this->m_nCount)
...{
cout<<"error"<<endl;
}
return this->m_pData[nIndex];
}
// class08011701.cpp : Defines the entry point for the console application.
//
#include " stdafx.h "
#include " Array.h "
using namespace std;
int _tmain( int argc, _TCHAR * argv[])
... {
Array ar1(10);
ar1.operator ()(5);
cout<<"()重载"<<endl;
for(int i=0;i<ar1.m_nCount;i++)
...{
cout<<ar1.m_pData[i]<<" ";
}
cout<<endl;
cout<<"------------------"<<endl;
Array ar2(15);
Array ar3(25);
Array ar4(25);
// Array ar2(2);
// cout<<ar2.m_pData<<endl;
ar2.operator +(ar1);
cout<<"+重载"<<endl;
for(int i=0;i<ar2.m_nCount;i++)
...{
cout<<ar2.m_pData[i]<<" ";
}
cout<<endl;
cout<<"------------------"<<endl;
ar1=ar1-ar2;
cout<<"-重载"<<endl;
for(int i=0;i<ar1.m_nCount;i++)
...{
cout<<ar1.m_pData[i]<<" ";
}
cout<<"------------------"<<endl;
cout<<endl;
cout<<"[]重载"<<endl;
cout<<ar1.operator [](5)<<endl;
cout<<"------------------"<<endl;
// cout<<ar1[20]<<endl;
cout<<"==重载"<<endl;
cout<<ar3.operator ==(ar2)<<endl;
cout<<(ar3 == ar4)<<endl;
cout<<"------------------"<<endl;
Array ar5;
ar5= ar3.operator *(5);
cout<<"*重载"<<endl;
for(int i = 0;i<ar5.m_nCount;i++)
...{
cout<<ar5.m_pData[i]<<" ";
}
cout<<endl;
cout<<"------------------"<<endl;
Array& ar6 = ar1 + ar2;
int a;
cin>>a;
return 0;
}