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 */