1

シナリオ:

BaseClass* pointer = &subClassXObject;  // subClassXObject is object of class subClassX 
                                        // which is derived from BaseClass and 
                                        // Instance<subClassX>. (Instance<subClassX> is 
                                        // for counting instances of type subClassX.)
                                        // Instance<subClassX> is derived from 
                                        // BaseInstance.

&... はアドレスを取得することを表します。C++ 標準用語では、オブジェクトはすでにアドレスであると定義されている可能性があります。この場合、&... はオブジェクト自体です。

subClassXObject のクラスは、この時点では不明です。BaseClass の定義済みのサブクラスである可能性があります。

それぞれ Instance<subClassX> からも継承する BaseClass の直接派生サブクラスの 1 つであることがわかっています。ここで、subClassX は BaseClass の直接派生サブクラスの名前です。

Instance<subClassX> は BaseInstance を継承しています。BaseInstance は、Instance<subClassX> が実装する public pure virtual 関数を定義します。その名前は getDescriptor です。

したがって、すべての subClassObject は getDescriptor にアクセスできます。

SubClassX* pointer = &subClassXObject;
pointer->getDescriptor();               // This should work

(それともそうではないでしょうか? 今、私はなぞなぞです: 誰かが外部からサブクラスで呼び出すことができるようにするために、サブクラスで基本クラスの public メソッドを明示的に実装する必要がありますか? いいえ...、そうではありませんか? )。

好き

BaseClass* pointer = &subClassXObject;
pointer->getDescriptor();

仕事に。

getDescriptor を BaseInstance および Instance<subClassX> から BaseClass および各サブクラスに移動することは可能ですが、BaseClass のユーザーにはインフラストラクチャ コードではなく、アプリケーション ロジック コードのみを記述してもらいたい (Instance<subClassX> メソッドを返すだけでよい場合でも)戻り値)。この背後にあるアイデアは、ユーザーがクラス以外の目的のコードを追加する必要なく、インスタンス化されたすべてのサブクラスのオブジェクトがフィードされ、一覧表示されるオブジェクト ブラウザーを作成することです。

ポインターを BaseInstance* にキャストすると、アプリケーションがクラッシュします。したがって、タイトルで表現されている私の質問。

お気遣いありがとうございます!

4

2 に答える 2