1. ホーム
  2. c++

[解決済み】バーチャル/ピュアバーチャルの説明

2022-03-24 17:14:03

質問

ある関数がvirtualとして定義されている場合、それは具体的にどういう意味ですか、またpure virtualと同じですか?

どのように解決するのですか?

から ウィキペディアの仮想機能 ...

オブジェクト指向プログラミングにおいて、C++やObject Pascalなどの言語では、仮想関数や仮想メソッドは、動的ディスパッチが容易な継承可能かつオーバーライド可能な関数やメソッドであるとされています。この概念は、オブジェクト指向プログラミング(OOP)の(実行時)ポリモーフィズムの重要な部分である。つまり、仮想関数は実行される関数のターゲットを定義しますが、そのターゲットはコンパイル時にはわからない可能性があります。

非仮想関数と異なり、仮想関数がオーバーライドされると、その関数が作成された階層だけでなく、最も派生したバージョンがクラス階層のすべての階層で使用されます。したがって、もしベースクラス を呼び出します。 は、基底クラスで定義されたバージョンではなく、派生クラスで定義されたバージョンが使用されます。

これは非仮想関数とは対照的で、派生クラスでオーバーライドすることは可能ですが、"new" バージョンは派生クラス以下でのみ使用され、ベースクラスの機能は全く変更されません。

ここで...

純粋仮想関数または純粋仮想メソッドは、派生クラスが抽象クラスでない場合、派生クラスが実装することが要求される仮想関数である。

純粋仮想メソッドが存在する場合、そのクラスは "abstract" であり、単独でインスタンス化することはできません。代わりに、純粋仮想メソッドを実装した派生クラスを使用する必要があります。純粋仮想はベースクラスではまったく定義されていないので、派生クラスでは を定義しなければ、その派生クラスも抽象クラスとなり、インスタンス化することができません。抽象メソッドを持たないクラスだけがインスタンス化できます。

virtual は基底クラスの機能をオーバーライドする方法を提供し、pure-virtual は基底クラスの機能をオーバーライドする方法を提供します。 が必要です。 となります。