C ++上級II:構造と継承

同じ順序でメンバ変数を定義して初期化します

理由:C ++オーダーのメンバーの破壊を確実にするためには、唯一の順序のメンバーを初期化するために必要とされても独特です。それを初期化するためにどのような順序によれば、メンバ変数に応じて順にクラスで定義されています。

代わりにコンストラクタの初期化割り当てを使用します

原因:これを行わない場合は、メンバ変数は、デフォルトコンストラクタを呼び出しますと、初期化時に、再び割り当てを呼び出します。しかし、これらの2つのステップは、あなたが割り当てコンストラクタメンバ初期化ステップは、直接によって達成される呼び出すことができます。

コンストラクタとデストラクタで仮想関数を呼び出すことは避けてください

ので:メンバーは派生オブジェクトは、そのメンバ関数を呼び出すために初期化されていない可能性がある意図しない混乱を持っています。基底クラスの構築時に、それは最終的にオフにする方法は独立したオブジェクトまたは基底クラスの派生クラスの他の部分は基本的に存在しません。

共通の基底クラスとしてデストラクタ、または仮想の保護、非仮想

理由:
直接デストラクタは、ベースポインタによりオブジェクトを派生場合:動的に派生クラスは、要求が、共通の基本クラスとしてデストラクタを必要とする基底クラスのデストラクタ、バーチャルを継承。

そうでない場合は、直接ベースポインタデストラクタ派生オブジェクトによって:サブクラスによって呼び出され、そのベースクラスデストラクタは、したがって、非仮想保護するために提供される必要はありません。

おすすめ

転載: blog.51cto.com/xiamachao/2457334