In Python, abbiamo una semplice sintassi semplice per assumere un int/float arbitrario a una potenza. Vale a dire, per voi non-Python programmatori, possiamo avere la seguente dichiarazione:Sovraccarico ** in C++
y = 2 ** 3
print y
Questo stamperà 8 alla console, e ha la sintassi bello come c'è una costruito in operatore di "potere". È possibile sovraccaricare "**" come un singolo operatore in C++? In particolare, voglio realizzare qualcosa di simile:
int a = 2;
int b = 3;
cout << (a**b) << endl;
o, se ciò non fosse possibile, qualcosa di simile:
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
Questi dovrebbe anche stampare da 8 a console. Capisco che sarebbe molto più facile ignorare l'operatore "^" per fare la stessa cosa, ma sono principalmente interessato a vedere se posso sovraccaricare "**". L'operatore "*" (per il caso della classe MyInt, se fosse una funzione membro) deve cercare se l'argomento è un altro "*", in quanto non conosco un modo per specificare "**" come un solo operatore? È persino possibile passare un operatore come argomento?
Accordo aggiuntivo/bonus se possibile (come se non l'avessi già detto abbastanza): No macro !!!
Si chiama overloading degli operatori, perché sovraccarichi gli operatori. ** non è un operatore. – DeiDei
Non sovraccaricare l'operatore^in termini di potenza, ha una precedenza inferiore a ==, + o - quindi causerà molte sorprese. –
@ ÖöTiib Ottimo punto! – mwm314