Notas 5 do C ++ Primer (capítulo 14, operações sobrecarregadas e conversão de tipo), operadores de membro

Existem dois tipos de operadores membros:

  • Operador de desreferência *
  • Operador de seta ->

Critérios de projeto

  • O operador de seta deve ser um membro da classe.
  • O operador de desreferência geralmente também é um membro da classe, embora não precise ser.
  • O operador de seta sobrecarregado deve retornar um ponteiro para a classe ou um objeto de uma classe com um operador de seta personalizado
  • A diferença entre desreferência e multiplicação é que um é um operador unário e o outro é um operador binário.

por exemplo.

    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 uma expressão da forma ponto-> mem, ponto deve ser um ponteiro para um objeto de classe ou um objeto de uma classe que sobrecarrega operador->. O tipo de ponto é diferente, o significado de ponto-> mem também é diferente.
1. Se ponto for um ponteiro, o operador de seta embutido é chamado e a expressão é equivalente a (* ponto) .mem.
2. Se point for um objeto de uma classe que sobrecarrega operator->, use o resultado de point.operator -> () para obter mem, e a expressão será equivalente a (point.operator -> ()) -> mem. Entre eles, se o resultado for um ponteiro, o primeiro passo é executado; se o próprio resultado contiver operador-> sobrecarregado, o passo atual é chamado repetidamente.


【referência】

[1] Código sobrecargaOperator.h

Acho que você gosta

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