Wie, um eine überlastung "operator %" in c++
Ich möchte, um eine überlastung der % - operator in c++, um zu vermeiden, dass die Bearbeitung einer riesigen block von code von hand. Ich versuchte dies:
static float operator %(const float& left, const float& right);
In meinem Kopf, aber es wird nicht funktionieren, weil "keine Memberfunktion operator benötigt einen parameter mit der Klasse oder enum-Typ".
Ich bin relativ neu in C++, was soll ich tun?
- Sie können nicht die Operatoren überladen für fundamentale Typen.
- Kannst du bitte posten, was Sie tun würden, innerhalb dieser Funktion? Ich bin wirklich wollen, um zu lernen, wie die modulo-operation auf Schwimmern!
- Tja, das ist traurig. Einfach nur neugierig, was ist der Grund?
- Ich fast wollte nur beantworten mit "Weil C++ ist nicht Ruby, aber vielleicht Sie vielleicht nicht bekommen, dass die Referenz. 🙂
- Der Grund ist, um zu verhindern, dass Menschen genau das tun, was Sie zu tun versuchen. Stell dir vor, wenn ich überlastet
operator+
auf Ganzzahlen durchführen, Vermehrung statt. Jeder, einschließlich meiner header-Datei mit, dass in der definition wäre es in für eine wilde Fahrt. - Das ist es, was dachte ich auch. Ruby ist mein Lieblings-nicht-C++ - Sprache für diesem Grund.
- Das ist genau die Art von Sache, die Ruby erlaubt (by design), per monkey-patching. 🙂 C++ -, wieder von design, nicht monkey-patching. 😛
- Wäre es nicht eine Mehrdeutigkeit, Konflikt, solange ich nicht mit namespace screwMath ? Und es gibt nicht mal eine defenition für Schwimmer%schweben ich bin zu überschreiben! Aber okay, muss google für Ruby nun..
- Sie weiß, es ist
fmod
im<cmath>
, das genau das tut, was Sie wollen? - "Vermeiden Sie das Bearbeiten der code von hand" - die meisten C++ - IDE ' s haben eine leistungsstarke Suchen&Ersetzen-Optionen. Möglicherweise müssen Sie schreiben ein regex, obwohl.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Operatorüberladungen müssen mindestens eines Ihrer Argumente als ein Benutzer-definierter Typ ist. So Sie dies nicht tun.
Was das bedeutet ist, dass Sie nicht überladen eines operators, wenn alle Operanden sind nicht-Klasse/enum-Typen. D. H., die Sie nicht überschreiben kann das Verhalten von
%
wenn beide Seitenfloat
(oderint
oder andere primitive Art).Wie bereits erwähnt wurde, kann man nicht definieren, das überladen von Operatoren für eingebaute Typen.
Allerdings, wenn Sie bereit sind, Sie zu nutzen, implizite Typ-Umwandlung, die Sie erreichen können, etwas in der Nähe, was Sie benötigen, mit einem einzigen Guss zu einer von Ihr schwimmt auf einer wrapper-Typ, die eine überladene% - operator.
In C++ müssen Sie sich nicht zu erklären, dass die Betreiber als statisch, im Gegensatz zu C#. Das argument beliebigen Typs sein können, und der Rückgabewert auch. Die erste Art wäre die Klasse selbst.
Beispiel:
static
und zwei Argumente, dachte ich, OP ist von C# - Welt!