类和对象(四)——默认成员函数(2)

运算符重载

特征:

1.函数名:operator+合法的运算符(eg:重载<,函数名:operator<)

2.运算符重载以后不改变运算符的优先级,结合性,操作数的个数

注:五个不能重载的运算符:

 1.   ?:   2. ::  3.sizeof  4. .*   5. .


一、赋值运算符重载

1.定义:赋值运算符的重载是对一个已存在的对象,进行(拷贝)赋值

而拷贝构造函数,是创建一个新的对象,并用一个已有的对象初始化这个新创建的对象


思考:为什么拷贝构造函数的返回值要用Date&,用viod的可以吗


答:从图中可以看出,void做返回值也不会出错,但为什么要用Date&呢?因为我们的= 支持连续赋值,如果我们想连续赋值(d3=d2=d1)时void做返回值就会出错,而Date&做返回值就可以。


2. 重载函数调用时编译器做的一些处理


赋值运算符中时怎么区分前置++,后置++的?

前置++/--: 

Date& operator++()

 Date& operator--()

后置++/--:

Date operator++(int)

Date  operator--(int)

后置++/--中其实并不需要参数(int),但是为了和前置的构成重载,我们在定义时加上了这个形参

后置++不用返回引用


取地址运算符重载(这俩个函数一般不需要重新定义):

class Date
{
public:
	Date* operator&()
	{
		return this;
	}
	const Date* operator&() const
	{
		return this;
	}
private:
	int _year;
	int _month;
	int _day;
};


猜你喜欢

转载自blog.csdn.net/audience_fzn/article/details/80453695