べき乗演算子

いくつかのプログラミング言語ではべき乗演算子を持っている。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