C ++ Primer quinto notas (capítulo 14 operaciones sobrecargadas y conversión de tipos) coincidencia de funciones y operadores sobrecargados

Si una clase proporciona tanto una conversión de tipo cuyo objetivo de conversión es un tipo aritmético como un operador sobrecargado, encontrará la ambigüedad entre el operador sobrecargado y el operador incorporado.

Si a es un tipo, la expresión a sym b puede ser:
// El formulario de llamada no puede usarse para distinguir si la llamada actual es una función miembro o una función no miembro
a.operatorsym (b); // a tiene un operatorym miembro función
operatorym (a, b); // operatorym es una función ordinaria

p.ej.


class SmallInt{
    
    
	friend SmallInt operator + (const SmallInt&,const SmallInt&);
public:
	SmallInt(int = 0);
	operator int() const {
    
    return val;}
private:
	std::size_t val;
};

SmallInt s1,s2;
SmallInt s3 = s1 + s2;	//使用重载的 operator+
//二义性错误,可以把0转换成 SmallInt,然使用 SmallInt 的 +;
//或者把 s3 转换成 int,然后对于两个 int 执行内置的加法。
int i = s3 + 0;		
  • El conjunto de funciones candidatas para operadores en expresiones incluye funciones miembro y funciones no miembro.
  • Cuando se utiliza un operador sobrecargado para actuar sobre un objeto de un tipo de clase, la función candidata contiene la versión ordinaria para no miembros y la versión incorporada del operador. Además, si el operando de la izquierda es un tipo de clase, la versión sobrecargada del operador definido en la clase también se incluye en la función candidata.

[Cita]

[1] Código classTypeExchange.h

Supongo que te gusta

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