[C++系列] 23. 取地址及const取地址操作符重载

1. 简介

取地址成员函数也是''类的六大默认成员函数''之一。其分为两种,普通取地址操作符、const取地址操作符。

有了上一节''const成员''的基础,const成员函数及const对象去调用,普通的成员函数普通的对象来进行调用,若没有普通成员函数,那么普通对象也能够调用const成员函数。

取地址是什么意思呢?就是返回当前对象的地址,对于成员函数来讲,this指针就是它的地址,需要返回指针。

2. 传参否?

将''&''重载为成员函数时,是否需要传参?

Date* operator&() {

}

''&'' 运算符是一个单目运算符,其只有一个参数,而这个参数就是一个对象,所以说这个对象是不用传的,定义为成员函数时函数参数就应该少一个,第一个函数参数就被this指针所代替。所以,在此不需要进行传参。

3. 函数重载实现

class Date {
public:
	Date(int year, int month, int day) {
		_year = year;
		_month = month;
		_day = day;
	}
	Date(const Date& d) {
		_year = d._year;
	}
	Date* operator&() {
		cout << "Date* operator&()" << endl;
		return this;
	}

	const Date* operator&() const {
		cout << "const Date* operator&() const" << endl;
		return this;
	}

private:
	int _year;
	int _month;
	int _day;
};

int main() {
	Date d1(2019, 4, 1);
	const Date d2(2019, 3, 31);

	Date* pa1 = &d1;
	const Date* pd2 = &d2;
	system("pause");
	return 0;
}

如果不写这两个函数的时候,编译器会帮助默认生成,若无其它操作完全够用了,因为这两个函数只返回this指针,也没有其他的操作。除非,你想返回别的地址,可以做到''返回你想返回的地址'',比如,返回一个病毒的地址,返回一个很深的调用链等等,可以自己按照需求进行重载实现,否则不必实现也无影响。

猜你喜欢

转载自blog.csdn.net/yl_puyu/article/details/88987363