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

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

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

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

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

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

#include<iostream>
#include<Windows.h>
using namespace std;
class Sample{
private:
int *p,len;
public:
Sample(){len=;}
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=;i<len;i++)
cout<<p[i]<<" ";
cout<<endl;
}
};
Sample::Sample(int *a,int l)
{
int i;
len=l;
p=new int[l];
for(i=;i<len;i++)
p[i]=a[i];
}
Sample::Sample(Sample &fp)
{
p=new int[fp.len];
len=fp.len;
for(int i=;i<len;i++)
p[i]=fp.p[i];
}
bool Sample::operator == (Sample t)
{
if(len==&&t.len==)
return true;
if(len!=t.len)
return false;
for(int i=;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=;i<len;i++)
p[i]=t.p[i];
return *this;
}
Sample& Sample::operator ++ ()
{
for(int i=;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=;i<len;i++)
fp.p[i]=p[i];
for(i=;i<t.len;i++)
fp.p[i]+=t.p[i];
}
else
{
fp.p=new int[t.len];
fp.len=t.len;
for(i=;i<t.len;i++)
fp.p[i]=t.p[i];
for(i=;i<len;i++)
fp.p[i]+=p[i];
}
return fp;
}
int main()
{
int a[],b[],c[],i;
int lena,lenb,lenc; cout<<"输入a[]的长度: ";cin>>lena;
cout<<"输入a[]: ";
for(i=;i<lena;i++)
cin>>a[i];
cout<<"输入b[]的长度: ";cin>>lenb;
cout<<"输入b[]: ";
for(i=;i<lenb;i++)
cin>>b[i];
cout<<"输入c[]的长度: ";cin>>lenc;
cout<<"输入b[]: ";
for(i=;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
*/
04-26 08:22