关于c++成员运算符重载小总结

C++成员运算符重载(operator->)

在类内重构成员运算符的时候,会遇到一个很怪的现象,就是在用对象使用重构的成员运算符,貌似会递归地访问,但这种想法是有出入的,可能在重载成员运算符时出现问题。

1.调用重载后的成员运算符情况

我们在重载成员运算符的时候的要求

  1. 无参数
  2. 必须是成员函数的形式重载
  3. 返回值类型仅能是重载了成员运算符的类或指向类(结构体)的指针

有没有察觉到问题,返回值的类型为什么只能是这两种呢。这时候需要明确,我们何时调用原有的成员运算符,何时调用重载后的成员运算符。来用代码说话。

//base 类
class base
{
   
public:
	//注意这个display()
	void display()
    {
   
        cout << "class base" << endl;
    }
}

//Smartpoint 类
class smartpoint
{
   
publicsmartpoint(base* pbase)
	:_pbase(pbase)
	{
   }	
	//注意这个display()
	void display()
    {
   
        cout << "class smartpoint" << endl;
    }
    
    base* operator->() const //返回指向base的指针类型
    {
    
        return _pbase;
    }
private:
	base *_pbase;
}

在这样的类定义中,两个类均有display()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值