再读C++ Primer 写了个小例子——运算符重载(08-01-17)

 再读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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值