c++重载运算符注意

      c++重载运算符的时候加&或不加:

如果加了&表示引用,说明用的都是同一块内存。如果不加,那么用的就是一份拷贝,即不同的内存。

一般连续操作的时候要加&。

 

      可以重新定义一个对象,然后返回这个对象,这样就不会改变当前对象的值;也可以直接在当前对象

上进行操作,返回*this,这样会改变当前对象的值。

这个代码能说明我想说的。

#include<iostream>
#include<Windows.h>
using namespace std;
class Sample{
private:
    int *p,len;
public:
    Sample(){len=0;}
    Sample(int *a,int l);
    Sample(Sample &fp);

    Sample operator = (Sample);
    Sample operator + (Sample);
    bool operator == (Sample);
    Sample& operator ++ ();
    Sample operator ++ (int);
    ~Sample(){
        if(len)
            delete[] p;
    }
    void display()
    {
        for(int i=0;i<len;i++)
            cout<<p[i]<<" ";
        cout<<endl;
    }
};
Sample::Sample(int *a,int l)
{
    int i;
    len=l;
    p=new int[l];
    for(i=0;i<len;i++)
        p[i]=a[i];
}
Sample::Sample(Sample &fp)
{
    p=new int[fp.len];
    len=fp.len;
    for(int i=0;i<len;i++)
        p[i]=fp.p[i];
}
bool Sample::operator == (Sample t)
{
    if(len==0&&t.len==0)
        return true;
    if(len!=t.len)
        return false;
    for(int i=0;i<len;i++)
    {
        if(p[i]!=t.p[i])
            return false;
    }
    return true;
}
Sample Sample::operator = (Sample t)
{
    p=new int[t.len];
    len=t.len;
    for(int i=0;i<len;i++)
        p[i]=t.p[i];
    return *this;
}
Sample& Sample::operator ++ ()
{
    for(int i=0;i<len;i++)
        p[i]++;
    return *this;
}
Sample Sample::operator ++ (int)
{
    Sample old=*this;
    ++(*this);
    return old;
}
Sample Sample::operator + (Sample t)
{
    int i;
    Sample fp;
    if(len>t.len)
    {
        fp.p=new int[len];
        fp.len=len;
        for(i=0;i<len;i++)
            fp.p[i]=p[i];
        for(i=0;i<t.len;i++)
            fp.p[i]+=t.p[i];
    }
    else 
    {
        fp.p=new int[t.len];
        fp.len=t.len;
        for(i=0;i<t.len;i++)
            fp.p[i]=t.p[i];
        for(i=0;i<len;i++)
            fp.p[i]+=p[i];
    }
    return fp;
}
int main()
{
    int a[15],b[15],c[15],i;
    int lena,lenb,lenc;

    cout<<"输入a[]的长度: ";cin>>lena;
    cout<<"输入a[]:  ";
    for(i=0;i<lena;i++)
        cin>>a[i];
    cout<<"输入b[]的长度: ";cin>>lenb;
    cout<<"输入b[]:  ";
    for(i=0;i<lenb;i++)
        cin>>b[i];
    cout<<"输入c[]的长度: ";cin>>lenc;
    cout<<"输入b[]:  ";
    for(i=0;i<lenc;i++)
        cin>>c[i];

    Sample t1(a,lena),t2(b,lenb),t3(c,lenc),t4,t5;
    cout<<"t1: ";t1.display();
    cout<<"t2: ";t2.display();
    cout<<"t3: ";t3.display();

    cout<<endl;

    if(t1==t2)
        cout<<"t1==t2 is true"<<endl;
    else cout<<"t1==t2 is false"<<endl;

    cout<<"t4=t2: ";
    t4=t2;
    t4.display();

    cout<<"t5=t2+t3: ";
    t5=t2+t3;
    t5.display();

    cout<<"t1++ : ";
    t1++;
    t1.display();

    cout<<"++t1 : ";
    ++t1;
    t1.display();
    system("pause");
}
/*
5 1 2 3 4 5 4 1 2 3 4 3 1 2 3
*/

 

posted @ 2015-11-07 01:14  sweat123  阅读(212)  评论(0编辑  收藏  举报