C++の虚関数、純虚関数
C++の最も重要な特性は多状態であり,多状態は主に虚関数によって実現される.具体的な実装手順は次のとおりです.
ベースクラスの関数は虚関数として定義され、派生クラスが上書きされる(すなわち、関数名、パラメータリスト、戻り値タイプが完全に同じ)場合、派生クラスの関数もvirtualキーワードを付けなくても自動的に虚関数になります.この場合、ベースクラスとサブクラスオブジェクトには、虚関数が含まれているため、虚関数テーブルが存在します.具体的な虚関数テーブルの構造は、この文書を参照してください.http://blog.csdn.net/haoel/article/details/1948051/.ベースクラスポインタを使用して関数にアクセスすると、ポインタが実際に指すオブジェクトのタイプに基づいてベースクラスまたはサブクラスの関数が呼び出されます.ここでは、プログラムの実行中に動的に判断される「動的」性です.
一方、純虚関数については、まず純虚関数の具体的な定義フォーマットは以下の通りである.
多くの場合、ベースクラスでは虚関数に対して意図的な実現を与えることができないため、あるいは、ベースクラス自体が実体ではなく、単なる範疇や概念である.例えば、動物、動物はトラ、パンダなどに分けられ、動物自体は実例化できないため、純粋な虚関数定義を通じて派生クラスで実現することができる.また,各派生クラスにおいて異なる実装が可能であり,非常に柔軟である.
また,純虚関数を含むクラスは抽象クラスとなり,純虚関数は具体的に実現されないため,抽象クラスはインスタンス化できない.
参考記事:
C++虚関数表解析:http://blog.csdn.net/haoel/article/details/1948051/
虚関数、虚関数の作用と使用方法:http://c.biancheng.net/cpp/biancheng/view/244.html
ベースクラスの関数は虚関数として定義され、派生クラスが上書きされる(すなわち、関数名、パラメータリスト、戻り値タイプが完全に同じ)場合、派生クラスの関数もvirtualキーワードを付けなくても自動的に虚関数になります.この場合、ベースクラスとサブクラスオブジェクトには、虚関数が含まれているため、虚関数テーブルが存在します.具体的な虚関数テーブルの構造は、この文書を参照してください.http://blog.csdn.net/haoel/article/details/1948051/.ベースクラスポインタを使用して関数にアクセスすると、ポインタが実際に指すオブジェクトのタイプに基づいてベースクラスまたはサブクラスの関数が呼び出されます.ここでは、プログラムの実行中に動的に判断される「動的」性です.
一方、純虚関数については、まず純虚関数の具体的な定義フォーマットは以下の通りである.
virtual ()=0;
多くの場合、ベースクラスでは虚関数に対して意図的な実現を与えることができないため、あるいは、ベースクラス自体が実体ではなく、単なる範疇や概念である.例えば、動物、動物はトラ、パンダなどに分けられ、動物自体は実例化できないため、純粋な虚関数定義を通じて派生クラスで実現することができる.また,各派生クラスにおいて異なる実装が可能であり,非常に柔軟である.
また,純虚関数を含むクラスは抽象クラスとなり,純虚関数は具体的に実現されないため,抽象クラスはインスタンス化できない.
参考記事:
C++虚関数表解析:http://blog.csdn.net/haoel/article/details/1948051/
虚関数、虚関数の作用と使用方法:http://c.biancheng.net/cpp/biancheng/view/244.html