C++ Primer 5th笔记(chap 14 重载运算和类型转换)成员运算符

成员运算符分为两种:

  • 解引用运算符*
  • 箭头运算符->

设计准则

  • 箭头运算符必须是类的成员。
  • 解引用运算符通常也是类的成员,尽管并非必须如此。
  • 重载的箭头运算符必须返回类的指针或者自定义了箭头运算符的某个类的对象
  • 解引用和乘法的区别是一个是一元运算符,一个是二元运算符。

eg.

    class StrBlobTest {
    
    
   		 size_type size() const {
    
     return data->size(); }
        std::string& operator*()const
        {
    
      
            return (*data)[i];
        }

        std::string* operator->()const
        {
    
     
            return &this->operator*();	//返回解引用结果的地址
        }
        ...
}
 StrBlobTest v1("a", "b");
 *v1 = "123555";
  std::cout << (&v1)->size() << std::endl;//调用 StrBlobTest 的size()函数
  std::cout << v1->size() << std::endl;//调用 std::string* operator->()const 

对于形如point->mem的表达式来说,point必须是指向类对象的指针或者是一个重载了operator->的类的对象。point类型不同,point->mem的含义也不同。
1.如果point是指针,则调用内置箭头运算符,表达式等价于(*point).mem。
2.如果point是重载了operator->的类的对象,则使用point.operator->()的结果来获取mem,表达式等价于(point.operator->())->mem。其中,如果该结果是一个指针,则执行第1步;如果该结果本身含有重载的operator->, 则重复调用当前步骤。


【参考】

[1] 代码overloadOperator.h

猜你喜欢

转载自blog.csdn.net/thefist11cc/article/details/113928280
今日推荐