 
 
 
 
 
 
 
  
C++ インタープリターを内蔵することと、 基底クラスを共有することの強力な点は、 オブジェクトの入出力のためのストリームメソッドが 自動的に生成できることである。 ROOT のクラスを拡張する際に プログラマーがなすべきことは、 まずユーザー定義のクラスヘッダーに
  class MyClass : public TObject {
    ....
    ClassDef(MyClass,1)  // The class title
  }
などと、書いておくこと。
ここで、 はバージョン ID である。
バージョン ID はランタイムタイプ ID に必要であり、
クラスのデーターメンバーが変更を受けたら更新する。
バージョン ID を
 はバージョン ID である。
バージョン ID はランタイムタイプ ID に必要であり、
クラスのデーターメンバーが変更を受けたら更新する。
バージョン ID を  にしておくと、
オブジェクト I/O が不要と見なされ、
ストリーマーメソッドは自動生成されない。
 にしておくと、
オブジェクト I/O が不要と見なされ、
ストリーマーメソッドは自動生成されない。 
クラスの実装では、
ClassImp(MyClass)などと、書いておくこと。
もう一つのポイントは、 かならずデフォールトコンストラクター (引数なしで呼べるコンストラクター)を用意しておくこと。 この際、デフォールトコンストラクター では、データーメンバーなるポインターにメモリーを確保してはいけない。 ROOT ファイルが読み込まれる際に、まず、 デフォールトコンストラクターが呼ばれ、 それからデーターが読み込まれるわけだが、 その際にそのポインターが上書きされ、 もともとそれが指していたオブジェクトは見失われ、 メモリーリークを生じる。
 
次に 
 なる名前で
 なる名前で
#ifdef __CINT__ #pragma link off all globals; #pragma link off all classes; #pragma link off all functions; #pragma link C++ class MyClass; #endifのようなファイルを用意する。
 
これは、
 の中で
 の中で
  MyClassDict.cxx: MyClass.h LinkDef.h
        @echo "Generating dictionary ..."
        rootcint -f MyClassDict.cxx -c MyClass.h LinkDef.h
のように使い、
 や
 や 
 などを
自動生成してもらう。
 などを
自動生成してもらう。
 
後は、
 と
 と 
 を含めて、
共有ライブラリーを作れば良い。
 を含めて、
共有ライブラリーを作れば良い。
 
 
 
 
 
 
