C ++での標準型のオーバーライド

多くの場合、プログラマは便利さと簡潔さのために最も単純なデータ型を再定義し、他の名前を付けます。 ほとんどの場合、これは次のように行われます。



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 ++ライブラリに導入しています。



All Articles