转载:https://blog.csdn.net/yl_puyu/article/details/88987363
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;
}
小森笔记: 如果更改为 const Date* pd2 = &d1;应该会报错,因为我想要个const Date* ,而返回的是Date* 。
如果不写这两个函数的时候,编译器会帮助默认生成,若无其它操作完全够用了,因为这两个函数只返回this指针,也没有其他的操作。除非,你想返回别的地址,可以做到''返回你想返回的地址'',比如,返回一个病毒的地址,返回一个很深的调用链等等,可以自己按照需求进行重载实现,否则不必实现也无影响。