In Python haben wir schöne einfache Syntax, um eine beliebige int/float zu einer Macht zu nehmen. Das heißt, für Sie nicht-Python-Programmierer, können wir die folgende Aussage haben:Überladen ** in C++
y = 2 ** 3
print y
Dies wird 8 an die Konsole aus und hat schöne Syntax, da es eine in „Power“ Operator gebaut ist. Ist es möglich, "**" als einzelnen Operator in C++ zu überladen? Insbesondere möchte ich so etwas wie dies zu tun:
int a = 2;
int b = 3;
cout << (a**b) << endl;
oder, falls dies nicht möglich ist, so etwas wie dieses:
MyInt a = new MyInt(2); // Wrapper class around ints to play nicely with **
MyInt b = new MyInt(3);
cout << (a**b) << end; // Assume ostream overridden for MyInt
Diese sollten auch 8-Konsole drucken. Ich verstehe, dass es viel einfacher wäre, den Operator "^" zu überschreiben, um dasselbe zu tun, aber ich bin hauptsächlich daran interessiert zu sehen, ob ich "**" überladen kann oder nicht. Würde der Operator "*" (für den Klassenfall MyInt, wenn es eine Memberfunktion wäre) nachsehen, ob das Argument ein anderes "*" wäre, da ich keine Möglichkeit kenne, "**" als anzugeben ein einzelner Betreiber? Ist es überhaupt möglich, einen Operator als Argument zu übergeben?
Zusätzliche/Bonus-Bedingung wenn möglich (als ob ich nicht schon genug gesagt habe): Keine Makros !!!
Es Betreiber Überlastung genannt wird, weil Sie Betreiber überlasten. ** ist kein Operator. – DeiDei
Überladen Sie nicht den Operator^in der Bedeutung der Macht, es hat niedrigere Priorität als ==, + oder - so wird es viele Überraschungen verursachen. –
@ ÖöTiib Toller Punkt! – mwm314