C ++ Primer quinta notas (capítulo 14 operaciones sobrecargadas y conversión de tipos) operadores de miembros

Hay dos tipos de operadores miembros:

  • Operador de desreferencia *
  • Operador de flecha ->

Criterio de diseño

  • El operador de flecha debe ser miembro de la clase.
  • El operador de desreferencia también suele ser miembro de la clase, aunque no tiene por qué serlo.
  • El operador de flecha sobrecargado debe devolver un puntero a la clase o un objeto de una clase con un operador de flecha personalizado
  • La diferencia entre desreferencia y multiplicación es que uno es un operador unario y el otro es un operador binario.

p.ej.

    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 

Para una expresión de la forma point-> mem, point debe ser un puntero a un objeto de clase o un objeto de una clase que sobrecarga operador->. El tipo de punto es diferente, el significado de point-> mem también es diferente.
1. Si el punto es un puntero, se llama al operador de flecha incorporado y la expresión es equivalente a (* punto) .mem.
2. Si point es un objeto de una clase que sobrecarga operator->, use el resultado de point.operator -> () para obtener mem, y la expresión es equivalente a (point.operator -> ()) -> mem. Entre ellos, si el resultado es un puntero, se ejecuta el primer paso; si el resultado en sí contiene el operador sobrecargado->, el paso actual se llama repetidamente.


【referencia】

[1] Código overloadOperator.h

Supongo que te gusta

Origin blog.csdn.net/thefist11cc/article/details/113928280
Recomendado
Clasificación