Pregunta sobre operator-overloading, c++ – simple c ++: cómo sobrecargar el operador de multiplicación para que funcione float * myClass y myClass * float

8
<code>class MyClass;

int main()
{
  float a = 5;
  MyClass c1;
  MyClass c2 = a*c1;
  MyClass c3 = c1*a;
}
</code>

¿Cómo puedo sobrecargar el operador de multiplicación para que tanto a * c1 como c1 * a funcionen?

@David Digamos que no puede user52343
Lo que hacen los constructoresMyClass ¿tener? ¿Se puede convertir implícitamente de unfloat? David Rodríguez - dribeas

Tu respuesta

1   la respuesta
19

Al igual que:

<code>MyClass operator* (float x, const MyClass& y)
{
    //...
}

MyClass operator* (const MyClass& y, float x)
{
    //...
}
</code>

La segunda también puede ser una función miembro:

<code>class MyClass
{
    //...
    MyClass operator* (float x);
};
</code>

Las 2 primeras opciones funcionan como declaraciones fuera del alcance de la clase.

Un pequeño addendum: en el caso de errores de vinculador, que ocurren cuando la definición está dentro de un archivo de encabezado, declare ambas sobrecargasinline magnetometer
El operador @LuchianGrigore * no acepta más de un parámetro, utilizando c ++ 11. Tuvo que ir con el segundo. Snowman
¿No se llama implícitamente a un operador sobrecargado utilizando el primer argumento? Entonces, si ese primer argumento es un tipo de datos básico (flotar aquí), ¿funcionará? vaisakh
@Snowman, ¿lo declaraste dentro de la clase? Si es así, entoncesthis es un parámetro implícito, por lo que todavía es un operador binario. Las 2 primeras opciones funcionan como declaraciones fuera del alcance de la clase. Luchian Grigore

Preguntas relacionadas