创建临时对象
将自加后的对象赋给另一个对象,我们需要创建一个临时对象,然后返回该对象
#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; //临时对象t
t.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;
}