Frage an c++, operator-overloading – simple c ++: Wie der Multiplikationsoperator überladen wird, damit float * myClass und myClass * float funktionieren

8
<code>class MyClass;

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

Wie kann ich den Multiplikationsoperator überladen, so dass sowohl a * c1 als auch c1 * a funktionieren?

@ David Sagen wir, es kann nicht user52343
Was Konstrukteure tunMyClass haben? Kann es implizit von einem konvertiert werden?float? David Rodríguez - dribeas

Deine Antwort

1   die antwort
19

Wie so:

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

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

Die zweite kann auch eine Mitgliedsfunktion sein:

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

Die ersten beiden Optionen funktionieren als Deklarationen außerhalb des Klassenbereichs.

@LuchianGrigore-Operator * akzeptiert nicht mehr als einen Parameter unter Verwendung von c ++ 11. Musste mit dem zweiten gehen. Snowman
Wird ein überladener Operator nicht implizit mit dem ersten Argument aufgerufen? Wenn dieses erste Argument ein Basisdatentyp ist (hier float), funktioniert es dann? vaisakh
Okay. Ich hatte es noch nie so versucht. Vielen Dank :) vaisakh
@Snowman hast du es in der Klasse deklariert? Wenn ja, dannthis ist ein impliziter Parameter und daher immer noch ein binärer Operator. Die ersten beiden Optionen funktionieren als Deklarationen außerhalb des Klassenbereichs. Luchian Grigore

Verwandte Fragen