たとえば交通費なんかをプログラムで管理する時に int 型に放り込んでしまうことがよくあるのですが、「交通費 is a 整数」というのが乱暴すぎないか?という指摘があります。
交通費は経費であり非課税であり、もしかすると日本国内向けのシステムだったら対象は円のみであったり…、などと考えていくと int に放り込むには消えてしまうと困るような情報がたくさんあることに気づきます(「交通費」という名前から多くは想像つきそうですが)。
今回、こういった場合の設計の善し悪しはともかく、 C++ には組み込み型と同じようなコンテクストで使用できるオブジェクトを作ることができるというお話しです。
たとえばこんなのです。
#include <cstdio> // 円の型 class Yen { private: int amount; public: Yen(int amount); operator int (); }; Yen::Yen(int amount) : amount(amount) {} Yen::operator int () { return this->amount; } int main(int argc, char *argv[]) { Yen transportation = 390; std::printf("交通費は %d 円です。\n", transportation); return 0; }
これを実行すると「交通費は 390 円です。」と出ます。 Yen transportation = 390; を int transportation = 390; と書き換えても同じように動作します。
今回の例では代入と参照しかできませんが、四則演算などの演算子もオーバーロードすれば int 型により近くなります。最初見たときは魔法のようでしたが、オブジェクトはこういう使い方もできるのです。
何かのヒントになれば幸いです。
Contributions