C++ 多態性パブリック継承の詳細な説明

hzc
リリース: 2020-07-01 16:31:08
転載
1980 人が閲覧しました

推奨学習: 「c チュートリアル

- メソッドの動作は、メソッドオブジェクトの呼び出し。このより複雑な動作はポリモーフィズムと呼ばれ、複数の形式があります。つまり、同じメソッドがコンテキストに応じて異なる動作をします。

仮想は、正しいメソッドまたはメソッドのシーケンスを呼び出すオブジェクトを実装します。

ポリモーフィズムを実現する 2 つのメカニズム:

  1. #基底クラスのメソッドを派生クラスで再定義します (基底クラスは変更することはできません。クラスメソッド)。
  2. #仮想メソッドを使用します。

# 関数を宣言するときにキーワード virtual を使用する場合、これらのメソッドは仮想メソッドと呼ばれます。

  • メソッドが基本クラスで仮想として宣言されると、そのメソッドは派生クラスで自動的に仮想メソッドになります。ただし、派生クラス宣言でキーワード virtual を使用して、どの関数が仮想であるかを示すこともお勧めします。
  • <span style="color: #0000ff;">class</span><span style="color: #000000;"> Brass
    {<br/>private:
        ...<br/>public:<br/>  ...<br/>  virtual void ViewAcct() const;<br/>  virtual ~Brass(){}
    }</span>
    ログイン後にコピー
     BrassPlus :
    ログイン後にコピー

基本クラスは、派生オブジェクトが解放されるときにデストラクターが正しい順序で呼び出されるようにするために、架空の関数を宣言します (仮想関数の役割については後述します)。 。

Brass dom("Dominic Banker", 11224, 4183.45);
BrassPlus dot("Dorothy Banker", 12118, 2592.00);
dom.ViewAcct();    // use Brass::ViewAcct()dot.ViewAcct();    // use BrassPlus::ViewAcct()
ログイン後にコピー

2 つの ViewAcct() プロトタイプは、2 つの独立したメソッド定義があることを示しています。基本クラスのバージョンには修飾名 Brass::ViewAcct() があり、派生クラスのバージョンには修飾名 BrassPlus::ViewAcct() があります。

オブジェクトではなく参照またはポインターによるメソッドの呼び出し:

キーワード virtual が使用されていない場合、プログラムは次の条件に基づいて選択します。参照型またはポインター型 メソッド:

// behavior with non-virtual ViewAcct()// method chosen according to reference typeBrass &b1_ref = dom;
Bross &b2_ref = dot;
b1_ref.ViewAcct();    // use Brass::ViewAcct()b2_ref.ViewAcct();    // use Brass::ViewAcct()
ログイン後にコピー

基本クラスのメソッドを派生クラスで再定義する場合は、通常、基本クラスのメソッドを仮想として宣言する必要があります。こうすることで、プログラムは参照やポインターの種類ではなく、オブジェクトの種類に基づいてメソッドのバージョンを選択します。基本クラスの仮想デストラクターを宣言することも一般的です。仮想デストラクターを使用すると、デストラクターの正しいシーケンスが確実に呼び出されます (つまり、派生クラス オブジェクトから、デストラクターを 1 回呼び出す基本クラス オブジェクトまで)。

基本クラス メソッドの呼び出し: 派生クラス メソッドでは、標準的な手法は、スコープ解決演算子を使用して基本クラス メソッドを呼び出すことです。 Brass::ViewAcct();

//

ベース部分の表示<span class="cnblogs_code"> <span style="color: #008000;"></span><span style="color: #008000;"></span></span>

以上がC++ 多態性パブリック継承の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
c++
ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート