1は、C ++ベースクラスに機能に関連するタイプは、派生クラスの継承は、直接異なる処理機能を変更していません。いくつかの機能のために、それが望まれる基本クラスは、この時点で基底クラスの仮想関数は、関数(仮想関数)として宣言され、それ自体のバージョンごとに、クラス定義を導出しました。
図2は、C ++で、我々は、結合、動的に呼び出すための基準として基本クラス(又はポインタ)を使用する場合、仮想関数を発生します。
関数定義内のクラス宣言文は、クラスの外で使用することはできません前に、図3に示すように、仮想キーワードは、表示されます。基底クラスの仮想関数は関数として宣言した場合は、派生クラスの仮想関数内の関数は、暗黙のうちにあります。
図4は、派生クラスは、ベースクラスで定義されたメンバを継承することができるが、派生クラスのメンバー関数は、必ずしも基本クラスから継承されたアクセスメンバーの権利を持っていません。そして、同じコードベースのクラスを使用して他の人には、派生クラスはパブリックメンバにアクセスすることができ、およびプライベートメンバーにアクセスすることはできません。しかし、このようなAクラスのメンバーがある基底クラスいくつかの点で、基底クラスが他のユーザーへのアクセスを禁止しながら、そのメンバーは、派生クラスへのアクセス権を持っていることを期待しました。私たちは、保護されたメンバアクセス演算子でこれを説明します。
私たちは、基本クラスとしてクラスをしたい場合は、図5に示すように、クラスだけではない宣言を定義する必要があります。
6、あなたはそれを継承する他のクラスを望んでいない、またはそれは、基本クラスとして適しているかどうかを検討したくない場合は、クラスを定義します。この目的を達成するために、C ++ 11標準では、キーワードの最終続くクラス名である相続の発生を防止するための新しい方法を提供します。
class NoDerived final {}; //NoDerived不能作为基类
class Base{};
class Last final : Base{}; //Last不能作为基类
class Bad : NoDerived { }; //错误:NoDerived是final的
class Bad2 : Last { }; //错误:Last是final的