您的位置:首页 > 编程语言 > C语言/C++

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

2008-03-19 21:40 417 查看
 再读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
;


    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;


}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ class null delete