操作符重载

来源:互联网 发布:js中string转date 编辑:程序博客网 时间:2024/06/05 17:52

1、前置自加操作符重载:

#include<iostream>using namespace std;class A{public:int a;A(int x):a(x){}A operator++(){++a;return *this;}A(A& r){cout<<"调用复制构造函数"<<endl;a=r.a;}void print(){cout<<a<<endl;}};int main(){A d(5);A f=++d;f.print();A e=d;return 0;}


输出结果:

声明:第一次调用复制构造函数其实是一种优化,因为++操作符是按值返回,要调用复制构造函数,而=也要调用复制构造函数,但是其实只要有一个临时对象就可以,不必调用两次构造函数。

后置自加操作符重载:

#include<iostream>using namespace std;class A{public:int a;A(int x):a(x){}A operator++(int o){A temp(*this);++a;return temp;}A(A& r){cout<<"调用复制构造函数"<<endl;a=r.a;}void print(){cout<<a<<endl;}};int main(){A d(5);A f=d++;f.print();A e=d;return 0;}


加法操作符重载,赋值操作符重载。

#include<iostream>using namespace std;class A{public:int *a;A(int x){a=new int(x);cout<<"construct!"<<endl;}~A(){cout<<"disconstruct!"<<endl;delete a;}const A operator +(const A&b){return A(*b.a+*a);}const A &operator =(const A &b){*a=*(b.a);return *this;}void print(){cout<<*a<<endl;}};int main(){A D(4);A *E=new A(5);D=*E;delete E;D.print();return 0;}


 

 

原创粉丝点击