いくつかのプログラミング言語ではべき乗演算子を持っている。Fortran, Python, Perl等だ。そしてこの3つの言語はいずれも「**」でべき乗を表現する。C++でもやってみよう。
#include <iostream> #include <cmath> using namespace std; class exponent { private: int n; public: friend class number; exponent(int n); exponent(number n); }; class number { private: int n; public: friend class exponent; operator int() const; number(int n); exponent operator*() const; number operator*(exponent e) const; }; number::operator int() const { return n; } number::number(int n) :n(n) {} exponent number::operator*() const { return exponent(n); } number number::operator*(exponent e) const { return number(static_cast<int>(pow(double(n), e.n))); } exponent::exponent(int n) :n(n) {} exponent::exponent(number n) :n(n.n) {} int main(void) { number a=3; number b=2; cout << (a**b); // <- べき乗!! return 0; }
乗算と同じ優先順位だし、左結合なので役立たず。アホクサいことをやってしまった。
Document ID: edd569a2b6d413d11935a719071b068a