C ++ principios básicos: C.87 cuidadosamente operadores de igualdad de la clase base

C.87: Cuidado con las clases de base en ==

C.87: operadores de igualdad clase base Precaución

 

 

La razón (razón)

 

 

 

 

Es muy difícil escribir una prueba de tontos y == útil para una jerarquía.

Escritura simple y fácil de usar operadores iguales sistema de herencia son muy difíciles.

 

 

 

Ejemplo, malo (muestra negativa)

 

class B {
    string name;
    int number;
    virtual bool operator==(const B& a) const
    {
         return name == a.name && number == a.number;
    }
    // ...
};

comparación de B acepta las conversiones para su segundo operando, pero no su primera.

La desigualdad de la segunda conversión de tipo de operando recibir B-, pero no el primero.

class D :B {
    char character;
    virtual bool operator==(const D& a) const
    {
        return name == a.name && number == a.number && character == a.character;
    }
    // ...
};

B b = ...
D d = ...
b == d;    // compares name and number, ignores d's character
d == b;    // error: no == defined
D d2;
d == d2;   // compares name, number, and character
B& b2 = d2;
b2 == d;   // compares name and number, ignores d2's and d's character

Por supuesto, hay maneras de hacer == trabajo en una jerarquía, pero los enfoques ingenuos no lo hacen escala

Por supuesto, hay maneras de hacer una acción igual operador de comparación en la jerarquía de herencia, pero no un método simple.

 

 

 

Nota (Nota)

 

Esta regla se aplica a todos los operadores de comparación habituales:! =, <, <=,> Y> =.

Esta regla se aplica a todos los operadores de comparación común :! =, <, <=,> y> =.

 

 

 

Cumplimiento (Sugerencias)

 

  • Flag un operador virtual == (); mismo para otros operadores de comparación:! =, <, <=,> y> =.

  • La desigualdad de las puntas se define como funciones virtuales, otras de comparación es el mismo: =, <, <=,> y> = !.

 

 

Descripción del enlace

 

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c87-beware-of--on-base-classes

 


 

Creo que este artículo útil? pulgares de bienvenida ya compartir con más personas.

Leer artículos más actualizados, por favor preste atención a las micro-canal número público de pensamiento orientado a objetos []

Publicados 408 artículos originales · ganado elogios 653 · vistas 290 000 +

Supongo que te gusta

Origin blog.csdn.net/craftsman1970/article/details/104928318
Recomendado
Clasificación