c++如何取消创建临时对象 节省内存,this指针就是对象的标签,而某个对象的成员变量也会被编译器自动贴上标签(this 指针)以证明是某个对象的,那么我们只要将成员变量自加,然后再返回该成员变量的标签,也就是this指针即可。
#include <iostream>
using namespace std;
class num
{
public :
num(){n=1;cout<<”构造函数执行!\n”;}
num(int i){n=i;cout<<”带参数的构造函数执行!\n”;}
num(const num&s){this->n=s.n;cout<<”复制构造函数执行!\n”;}
~num(){cout<<”析构函数执行!\n”;}
int get()const{return n;}
void set(int x){n=x;}
void add(){++n;}//定义自加函数
num operator ++(){//operator是c++关键字函数名,与普通重载数相同,c++已定义运算符的类型,其后的++表示重载的是自加运算符,{}里面的是实现部分
++n;
return *this;//*this为自加后的原始对象
}
private:
int n;
};
int main()
{
num i;
//i.add();//调用成员函数实现自加
num y=++i;//对对象i自加也就是对成员n自加,然后返回的临时对象赋值给对象y
cout<<”y:”<<y.get()<<endl;
//y++;这是错的因为i是对象,并没有自加运算
return 0;
}
c++如何取消创建临时对象二。
#include <iostream>
using namespace std;
class num
{
public :
num(){n=1;cout<<”构造函数执行!\n”;}
num(int i){n=i;cout<<”带参数的构造函数执行!\n”;}
num(const num&s){this->n=s.n;cout<<”复制构造函数执行!\n”;}
~num(){cout<<”析构函数执行!\n”;}
int get()const{return n;}
void set(int x){n=x;}
void add(){++n;}//定义自加函数
const num &operator ++(){//const关键是防止返回后再自加,也就是避免++++之类的出现, 引用‘&’的使用为了避免复制构造函数的调用,operator是c++关键字函数名,与普通重载数相同,c++已定义运算符的类型,其后的++表示重载的是自加运算符,{}里面的是实现部分
++n;
return *this;//*shis为原始对象
}
private:
int n;
};
int main()
{
num i;
//i.add();//调用成员函数实现自加
num y=++i;//对对象i自加也就是对成员n自加,然后返回的临时对象赋值给对象y
cout<<”y:”<<y.get()<<endl;
//y++;这是错的因为i是对象,并没有自加运算
return 0;
}
本文链接地址: c++如何取消创建临时对象 节省内存