运算符重载笔记

来源:互联网 发布:三位一体 for mac 编辑:程序博客网 时间:2024/06/06 12:38

创建临时对象

将自加后的对象赋给另一个对象,我们需要创建一个临时对象,然后返回该对象

 

#include <iostream>using namespace std;class num{public:num(){n=1;}~num(){}int get()const{return n;}void set(int x){n=x;}num operator++(){++n;num t;                  //临时对象tt.set();return t;}private:int n;};int main(){return 0;}

 

创建无名临时对象


要想实现以上功能也可以不用创建一个临时对象,假如我们有一个带参数的构造函数,那么我们只要这个构造函数返回即可。

#include <iostream>using namespace std;class num{public:num(){n=1;}num(int i){n=i;}~num(){}int get()const{return n;}void set(int x){n=x;}num operator++(){++n;return num(n);}private:int n;};int main(){return 0;}

 

取消创建临时对象

创建一个对象将会调用构造函数,来为该对象开辟内存空间,而销毁该对象则要调用析构函数来释放内存,每创建一次对象,系统都要牺牲一定的速度和内存空间,this指针就是当前对象的标签,而当前对象的成员变量也会被编译器自动贴上this标签以证明是当前对象的,那么只要将当前对象的成员变量自己,然后返回this指针指向的当前对象即可。


 

#include <iostream>using namespace std;class num{public:num(){n=1;}num(int i){n=i;}num(const num &s){this->n=s.n;} //为了避免按值返回创建一个*this的临时副本,我们最好把operator的返回值定义为按别名返回,~num(){}                        //并且我们不可能只想能够++++i这样的操作,,既将i进行前置自加后再进行自加,因此我们有必要将它的返回值也int get()const{return n;}       //定义为常量如:void set(int x){n=x;}num operator++()                //const num &operator(){}{++n;return *this;}private:int n;};int main(){return 0;}


 

以上重载的是前置自加运算符,下面重载一下后置运算符。

#include <iostream>using namespace std;class num{public:num(){n=1;}num(int i){n=i;}num(const num &s){this->n=s.n;}~num(){}int get()const{return n;}void set(int x){n=x;}const num &operator++()               //前置自加{++n;return *this;            }const num operator++(int o)          //后置自加         int o参数没有任何实际意义,只是区分与前面的前置自加重载的区分。           {num temp(*this);            //利用先把未自加的值赋给临时对象,然后自加值,然后返回临时对象。由于临时对象一旦调用完就会成为++n;                        //找出作用域的空引用,所以不能按别名返回,得用按值返回。return temp;}private:int n;};int main(){return 0;}

原创粉丝点击