6.c++之运算符重载

星期四, 17. 五月 2018 03:35下午
####运算符重载
重载前置自身构造函数

void operator++(){++n;}

++i;

创建临时对象

class num{
num operatorr++()
{
	++n;
	num t;
	t.set(n);
	return t;
}

}
int main()
{
	num i;
	num x=++i;
}

**创建无名临时对象:**返回带有参数的构造函数。这种方法不可取

取消创建临时对象:利用this指针

const num &operatorr++()//避免按值返回时创建一个×this指针,最好将opertaor()的返回值定义为按别名返回。由于不可能执行++++i返回值定义为常量。若需要执行num x=++++i;去掉const即可。
{
	++n; 
	return *this;
}
int main()
{
	num i;
	num x=++i;//构造一个新对象并用已有对象对它进行初始化,所以会调用赋值构造函数。
	i=++i;//只是对象之间的赋值,并没有构造新对象,所以不会调用复制构造函数。
		}

重载后置自加运算符
前置自加++X:先自加后取值。

const num operatorr++(int o)//由于我们返回的是临时对象,因此我们必须将其按值返回,而不能用别名的方式返回,这是因为按值返回会创建一个临时副本并返回该副本,但是按别名方式则不会创建副本,结果导致临时对象超出作用域而被析构掉,返回一个空对象。int o参数没有任何实际意义,它不会传递到函数体汇总,它只是operator++()函数设置的一个信号,提醒编译器,目前添加了参数的函数是一个后置自加运算符函数。
{
	num temp(*this);
	++n; 
	return temp;
}

重载加法运算符函数operator+实现对象自加

const num operator+(const num&r){return num(n+r.get());}

...
num one(1),two(2),three;
three=one+two;

重载赋值运算符函数operator=

你可能感兴趣的:(C++学习入门)