問題タブ [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 投票する
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デコレータをどのように実装しますか?

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

c++ - 複数の継承されたテンプレート化された関数を特殊なバージョンでオーバーライドする

では、最初にサンプル コードを示します。これは、コンパイルされませんが、私がやろうとしていることを伝えようとする私の試みです:

だから、私がやろうとしているのは、派生クラスをさまざまなコールバックリストに自動的に接続する一種のラッパークラスを継承することです。派生クラスの特定のインスタンスをリストに接続する必要があります。ご覧のとおり、派生クラスの作成の一環として、「ユーザー」がコールバック関数を作成する必要があります。

別の構文を使用する必要があるかもしれませんが、これは機能するはずです。うまくいかない場合、何か提案はありますか?

0 投票する
9 に答える
33483 参照

c# - 多重継承に関連するインターフェースの実際の使用例

プログラムに実装できるようにインターフェイスを理解しようとしていますが、どのように使用すればよいか想像できません。また、C#で多重継承でそれらを使用する例を教えてください

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

c++ - 異なるテンプレート タイプでの複数の継承

私はC++でイベント処理に取り組んでおり、イベントの通知を処理するために、イベントを生成するクラスが継承できるクラスEventGeneratorがあります。EventGenerator には、他のクラスがコールバックに追加するために使用できるメソッドと、イベントが発生したときにコールバックを呼び出すメソッドがあります。

さまざまなタイプのイベントの通知を処理するために、テンプレート タイプ T で EventGenerator をパラメーター化しました。通知クラスは、さまざまなタイプでパラメーター化された EventGenerator から複数回継承できます。

完全を期すために、EventGenerator のコードを次に示します。



そして、コールバックを追加したいクラスが継承する EventListener のコードは次のとおりです-



これはあまり良いデザインではないと感じており、そのような問題に対してより良いデザインがあるかどうか疑問に思っていました.

編集:気になるのは、多重継承を使用しているという事実です。頻繁に使用しないように警告されてきたので、そのような設計が将来悪いことが起こる可能性があるかどうかについての意見が欲しかったのでしょう。

ありがとう