問題タブ [multiple-inheritance]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
365 参照

c++ - 任意の数のクラスから派生する

機能を一連のプラグイン ポリシーに依存させたいクラスがあります。しかし、クラスを任意の数のクラスから派生させる方法がわかりません。

以下のコードは、私が達成しようとしているものの例です。

ありがとう、ポールH

0 投票する
1 に答える
602 参照

php - PHPで多重継承をエミュレートする

私はモデルのシステムを持っています:

R00_Model_iCommentableUniqueがあり、R00_Model_Postはそれから継承されたいと考えています。しかし、それは不可能であり、R00_Model_iTaggedUniqueからすでに継承されており、R00_Model_iCommentableUniqueからR00_Model_iTaggedUniqueを継承すること、またはその逆は賢明ではないと思います。私はそれをどのように実装するかを1つだけ考えましたが、いくつか疑問があります。たぶん、あなたはいくつかの賢い方法について私に話すか、その方法を批判することができますか?


R00_Model_i * Uniqueをクラスではなくインターフェースにして、R00_Model_Helper_iUniqueなどのヘルパーオブジェクトを作成することを考えました(おそらくそれは一般的なパターンであり、クールな名前がありますが、「ヘルパー」はそこでクールになるとは思いませんか? )。次に、R00_Model_iUniqueで、__ call()を作成します。これは、呼び出されたオブジェクトのすべてのインターフェイスをチェックし、ヘルパーで呼び出されたメソッドを検索します。

それとも、反射やその他の邪悪な遅いものが多すぎますね。

0 投票する
2 に答える
236 参照

.net - 複数の継承された動作を可能にするBDDスタイルのフレームワークはありますか?

システムテストの多くはBDDスタイルで記述されており、重複を最小限に抑えるために継承された動作を適切に利用しています。たとえば、これは購入テストの基本的な階層である可能性があります。

この場合、BehavesLikeSuccessfulPurchaseアカウントステートメントにデビットエントリが必要であるなどの一般的な動作をBehavesLikePurchaseWithValidCreditCard定義し、クラスは有効なクレジットカードを使用して任意のタイプの製品を購入するためのテストワークフローを定義するため、テストは具体的な製品インスタンスを提供するだけの小さな派生クラスです。 、例えば

ただし、具体的な製品タイプによっては、追加のチェックも必要です。たとえば、ビデオが正常に購入されるたびに、ユーザーのビデオライブラリに追加されていることを確認します。理想的には、これは別のクラスによって定義され、架空の構文を使用して混合される可能性があります。

ただし、もちろんC#は多重継承やミックスインをサポートしていないため、追加の動作に呼び出しを転送するボイラープレートメソッドを大量に作成することになります。この動作は、動作が変わるたびに変更する必要があります。

私たちが本当に必要としているのは、観察すべき追加の動作のタイプを提供するだけで、テストからの複数の動作をサポートする独自のメカニズムを備えたフレームワークです。私はxUnitと仕様の例を見てきましたが、そのトリックを実行できるいくつかの拡張機能を考え出すことは可能であるように見えますが、すでに存在するものはありますか?

0 投票する
4 に答える
317 参照

c++ - クラス(vtables)のC ++別のコンパイラ?

多重継承を許可しない 1 つのコンパイラでクラス A をコンパイルし、それをサポートするクラス B (およびクラス A から派生したクラス B) をコンパイルすると、どのような結果になるのか疑問に思っていました。

リンクの手順がよくわかりません...両方を併用することはできますか?この状況で vtables を使用して別のコンパイラを使用することには、どのような欠点がありますか? クラス B を使用するコードが適切に機能することは不可能でしょうか?

ありがとう。

0 投票する
2 に答える
6821 参照

c++ - 複数の interfaces() を持つオブジェクトに QueryInterface() を実装するときに、明示的なアップキャストが必要なのはなぜですか?

2 つ以上の COM インターフェイスを実装するクラスがあるとします。

私が見たほとんどすべてのドキュメントは、 IUnknown に QueryInterface() を実装するときに、このポインターをインターフェイスの 1 つに明示的にアップキャストすることを示唆しています。

問題は、なぜこれをコピーできないのですか?

ドキュメントには通常、後者を行うと、同じオブジェクトに対する QueryInterface() の呼び出しはまったく同じ値を返さなければならないという要件に違反することになると書かれています。

よくわかりません。IInterface2 に対して QI() を実行し、そのポインターを介して QueryInterface() を呼び出すと、C++ は IInterface2 に対して QI() を実行する場合とは少し異なるこれを渡すということですか?

0 投票する
4 に答える
243 参照

c++ - オブジェクトポインタが多重継承で異なる場合でも、これが同じであるのはなぜですか?

多重継承を使用する場合、C ++はいくつかのvtableを維持する必要があり、これにより、共通の基本クラスの「いくつかのビュー」が作成されます。

コードスニペットは次のとおりです。

次の出力が生成されます。

ここcasted1casted2は、さまざまなサブオブジェクトを指しているため、妥当なさまざまな値があります。仮想関数が呼び出された時点で、基本クラスへのキャストが実行され、コンパイラはそれが元々最も派生したクラスであったことを認識していません。それでもこれは毎回同じです。それはどのように起こりますか?

0 投票する
1 に答える
894 参照

visual-c++ - COM_INTERFACE_ENTRY_IIDとCOM_INTERFACE_ENTRY2_IIDの違いは何ですか?

COM_INTERFACE_ENTRY_IIDとCOM_INTERFACE_ENTRY2_IIDの両方が、クラスがそれぞれ共通のインターフェイスから派生した2つ以上のクラスから派生した場合のようです。このような:

};

(IPersistStreamとIPersistFileの両方がIPersistから派生します)。

どちらも自由に含めることができるようです

また

私のクラスのCOMマップに入れれば、問題なく動作します。

両者に違いはありますか?

0 投票する
2 に答える
76 参照

inheritance - 基本クラスは、どのアイテムがそれを継承しているかを知ることができますか

ベースクラス「AsyncHandlerBase」があります

基本クラスは複数のページに継承されます。特定のクラスがそれを継承しているときに特定のコードを実行する方法は基本クラスにありますか?その特定のコードをページ自体で実行しますが、この場合は実行できません。

0 投票する
3 に答える
204 参照

python - すべての基本関数が呼び出されるようなPythonでの継承

基本的に、私が欲しいのはこれを行うことです:

そして、出力を

extendInheritデコレータをどのように実装しますか?