W Pythonie mamy ładną, prostą składnię, która przenosi arbitralne int/float na potęgę. Mianowicie, bo nie-programistów Pythona, możemy mieć następujące oświadczenie:Przeciążanie ** w C++
y = 2 ** 3
print y
Drukuje 8 do konsoli i ma ładny składnię jak jest zbudowany w operatora „Power”. Czy możliwe jest przeciążenie "**" jako pojedynczego operatora w C++? W szczególności, chcę osiągnąć coś takiego:
int a = 2;
int b = 3;
cout << (a**b) << endl;
lub, jeżeli nie jest to możliwe, coś takiego:
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
Powinny one również wydrukować 8 do konsoli. Rozumiem, że znacznie łatwiej byłoby zastąpić operatora "^", aby zrobić to samo, ale najbardziej interesuje mnie, czy mogę przeciążyć "**". Czy operator "*" (dla przypadku klasy MyInt, gdyby była funkcją członka) musi sprawdzić, czy argument jest inny "*", ponieważ nie znam sposobu na określenie "**" jako jeden operator? Czy możliwe jest przekazanie operatora jako argumentu?
Dodatkowe/premiowe zastrzeżenie, o ile jest to możliwe (tak jakbym jeszcze nie powiedział): Brak makr !!!
Nazywa przeciążanie operatorów, ponieważ przeciążasz operatorów. ** nie jest operatorem. – DeiDei
Nie przeciążaj operatora^w znaczeniu mocy, ma on niższy priorytet niż ==, + lub - więc spowoduje wiele niespodzianek. –
@ ÖöTiib Świetny punkt! – mwm314