多型は、リンクを生成する親クラスと同じ名前のサブクラスに関数内の親クラスに加えてフロント「仮想」のキーワードです。
多型は、二つの特性を使用する:シェイプアップ、動的結合します
スタイル手段まで:例えば、次のコードサブクラスEillpceが親Shapeが見にオブジェクトエルなどのオブジェクトを見て親として、サブクラスのオブジェクトを取ります。
動的バインディング:私たちは、コンパイル時には不確定であるコールにどの機能を知る前に、実行時間を時間の関数を呼び出したいときは、
クラス形状 { 公共: 形状(); 仮想〜形状(); // なぜデストラクタ仮想関数を持つ 仮想 無効レンダリング(); 空の移動(のconst XYPos&); 仮想 のボイドAリサイズ(); 保護: XYPosセンター。 }。 クラス楕円:公共の形状 { 公共: 楕円(フロート MAJ、フロートMINR)。 仮想 無効)(レンダリング; // 独自に定義します 保護: フロートmajor_axis、minor_axisを。 }。 クラスサークル:公共楕円 { 公共: 円(フロート半径):楕円(半径、半径){} 仮想 ボイド(レンダリング)。 }。
... 無効レンダリング(形状* P) { P - >()をレンダリング; // ここで関数が呼び出されるレンダリングどのクラスを決定するために、渡されたパラメータの種類に基づい } ボイドFUNC() { 楕円はELL(10、20 )。 ell.render(); サークルCIRC(40 )。 circle.render(); レンダリング(&ELL); // この関数は、楕円がレンダリングと呼ばれる レンダリング(&CIRC); // この関数は、サークルと呼ばれてレンダリングされます }
役割の機能の前に仮想書き込み:あなたは、コールへのクラスのオプションは、我々はボイド(形状* p)をレンダリングするときに、より言うためにここにいるのレンダリング機能を知っているだけで、コンパイル時に、ポインタまたは関数のリファレンスを使用する場合のpポインタの状態ポインタpが変数は、基本クラスがそのサブクラスのものであってもよいです形成してもよいです。
実装の多型:
実装の多型