C++成员运算符重载(operator->)
在类内重构成员运算符的时候,会遇到一个很怪的现象,就是在用对象使用重构的成员运算符,貌似会递归地访问,但这种想法是有出入的,可能在重载成员运算符时出现问题。
1.调用重载后的成员运算符情况
我们在重载成员运算符的时候的要求
- 无参数
- 必须是成员函数的形式重载
- 返回值类型仅能是重载了成员运算符的类或指向类(结构体)的指针
有没有察觉到问题,返回值的类型为什么只能是这两种呢。这时候需要明确,我们何时调用原有的成员运算符,何时调用重载后的成员运算符。来用代码说话。
//base 类
class base
{
public:
//注意这个display()
void display()
{
cout << "class base" << endl;
}
}
//Smartpoint 类
class smartpoint
{
public:
smartpoint(base* pbase)
:_pbase(pbase)
{
}
//注意这个display()
void display()
{
cout << "class smartpoint" << endl;
}
base* operator->() const //返回指向base的指针类型
{
return _pbase;
}
private:
base *_pbase;
}
在这样的类定义中,两个类均有display()