[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指针,也没有其他的操作。除非,你想返回别的地址,可以做到''返回你想返回的地址'',比如,返回一个病毒的地址,返回一个很深的调用链等等,可以自己按照需求进行重载实现,否则不必实现也无影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ypuyu

如果帮助到你,可以请作者喝水~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值