2016-04-25 8 views
-4

この質問は、私が抽象クラスを作成するときに純粋仮想関数を派生クラスに実装しなければならないという条件であるため、その情報が必要であると思ったサイトで尋ねられました。ベースには、それらから派生したクラスに関する情報がありますか?

+0

CRTPまたは通常の継承を使用していますか? – NathanOliver

+0

親クラスは子クラスについて何も知る必要はありませんが、*コンパイラ*はそれをすべて知っていれば十分です。 –

答えて

1

基本クラスには、そのサブクラスに関する情報がありません。 サブクラスには、基本クラスに関する情報があります。

+0

あなたは情報の意味に依存します。 [CRTP](https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern)を使用すると、基本クラスは派生クラスのすべてのパブリックメンバーにアクセスできます。 – NathanOliver

+0

@ NathanOliverはい、私はRegularを意味します。申し訳ありません指定しないでください。 –

+0

@NathanOliver私はCRTPについて知らなかった。とても興味深い! –

0

基本クラス内に仮想関数を宣言した場合 コンパイルでは、基本クラス内でジャンプリストが生成され、その基本クラスから派生して関数を宣言すると言うことができます仮想基底クラス関数と同じ宣言を持つコンパイラは、関数のアドレスを派生クラスから基底クラスのそのジャムリストに置きます。 もちろんこれは派生クラスによって行われます。

継承チェーンがある場合、最後にインスタンス化されたクラスはその関数のアドレスを配置します。そして、基底クラスが関数を呼び出そうとすると、ジャンプリストを使用して正しい関数にジャンプします。

関連する問題