2017-11-23 10 views
3

クラスCがクラスBから継承し、Aで定義された仮想関数をオーバーライドすると仮定します。Cは関数をオーバーライドしません。タイプA *のポインタがタイプCのオブジェクトを指している場合、関数呼び出しはBでオーバーライドされたバージョンを使用しますか?マルチレベル継承C++

+3

のだろうか? –

+2

@ChristianHackl私は、このような一見単​​純な質問を控えるのを留意しています。 C++には、UBが動作するように見えるかもしれないが、実際にはそうではないかもしれない多くのケースがあり、尋ねるのに傷つくことはありません:) – Quentin

+2

@Quentin:はい、いいえ。より良い質問は、「それは私が試したときにそれを呼び出すが、その行動は保証されているのだろうか?」ということである。*それが立てば、質問は私にとっては宿題のように思える。 –

答えて

5

はい!

意味的には、Cは、その実装を暗黙的にBから継承します。
具体的には、呼び出される仮想関数の実装は、最も派生したものです。

2

タイプAのポインタがタイプCのオブジェクトを指している場合、関数呼び出しはBでオーバーライドされたバージョンを使用しますか?

はい。あなたは試したことがありますが、その場合にはC.で仮想関数を実装していない限り、

0

はい関数呼び出しは、Bでオーバーライドされたバージョンを使用します、関数呼び出しはC.