多くの場合、プログラマは便利さと簡潔さのために最も単純なデータ型を再定義し、他の名前を付けます。 ほとんどの場合、これは次のように行われます。
typedef unsingned int uint32;
typedef signed int int32;
typedef符号なしcharバイト。
まあなど。 提案を行います。各タイプのクラスを作成して、最も単純なタイプをオーバーライドしませんか? そのようなオブジェクトを格納するときのメモリ消費は、理論的には増加しないはずです(本質的に、仮想関数を使用しません)。 たとえば、次のようなDoubleクラスを作成します。
クラスDouble
{
公開:
Double(const Double&value);
ダブル演算子+(const Double&right)const;
ダブル演算子-(const Double&right)const;
Bool IsPositiveInfinity();
Bool IsNegativeInfinity();
プライベート:
double _value;
}
または、たとえばchar型の場合:
クラス文字
{
公開:
Char(char値);
Bool IsDecimalDigit()const;
Bool IsLetter()const;
Bool IsWhiteSpace()const;
ブール演算子==(const char&other);
Bool operator!=(Const Char&other);
プライベート:
char _value;
};
したがって、最も単純な型をオブジェクトとして操作し、コードの読みやすさを高め、プログラムで何が起こるかをより細かく制御できます(たとえば、double型で実行された乗算の数をカウントするには、オーバーロードされた演算子にカウンターを配置します)。
パフォーマンス/メモリ消費量が過剰になることはありません。
これまでのところ、このアプローチの長所/短所を共有することはできませんが、徐々にC ++ライブラリに導入しています。