問題タブ [polymorphism]

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 投票する
9 に答える
28562 参照

c# - 継承されたメンバーを非表示にする

継承されたメンバーを効果的に隠す方法を探しています。共通の基本クラスから継承するクラスのライブラリがあります。最近の子孫クラスの一部は、痕跡となった依存関係プロパティを継承しており、IntelliSenseを使用したり、ビジュアルデザイナーでクラスを使用したりすると、少し混乱する可能性があります。

これらのクラスはすべて、WPFまたはSilverlight2.0用にコンパイルされるように作成されたコントロールです。ICustomTypeDescriptorとについては知ってICustomPropertyProviderいますが、Silverlightでは使用できないと確信しています。

これは、ユーザビリティの問題ほど機能的な問題ではありません。私は何をすべきか?

アップデート

私が本当に隠したいプロパティのいくつかは、私自身ではない祖先からのものであり、私が設計している特定のツールのために、newオペレーターと一緒にメンバーを隠すことはできません。(私は知っている、それはばかげている)

0 投票する
10 に答える
1584 参照

c++ - 継承とポリモーフィズム - 使いやすさと純粋さ

プロジェクトでは、私たちのチームはオブジェクト リストを使用して、すべて同様の方法で処理する必要がある一連のデータに対して大量の操作を実行しています。特に、異なるオブジェクトが同じように動作するのが理想的です。これは、ポリモーフィズムによって非常に簡単に実現できます。私が抱えている問題は、継承が関係を持っているのではなく、関係であることを意味することです。たとえば、いくつかのオブジェクトにはダメージ カウンターがありますが、これをオブジェクト リストで使いやすくするために、ポリモーフィズムを使用できます。(人ダメージカウンターではありません。)

私が考えることができる唯一の解決策は、継承に頼るのではなく、クラスのメンバーが暗黙的にキャストされたときに適切なオブジェクト型を返すようにすることです。プログラミングの容易さと引き換えに、 is a / has a idea を忘れた方がよいでしょうか?

編集:より具体的には、私はC++を使用しているため、ポリモーフィズムを使用すると、派生クラスが単一のリスト内に存在し、ベースの仮想関数によって操作されるという意味で、異なるオブジェクトが「同じように動作する」ことができますクラス。インターフェイスの使用 (または継承を介してそれらを模倣すること) は、私が喜んで使用するソリューションのようです。

0 投票する
16 に答える
6997 参照

oop - ポリモーフィズムを使用した式評価とツリー ウォーキング? (スティーブ・イェッジ)

今朝、私はSteve Yegge の: When Polymorphism Failsを読んでいたとき、彼の同僚が Amazon での面接に来た潜在的な従業員に尋ねていた質問に出くわしました。

実際のポリモーフィズムの例として、古典的な「eval」インタビューの質問を見てみましょう。これは (私の知る限り) Ron Braunstein によって Amazon にもたらされました。OOP 設計、再帰、バイナリ ツリー、ポリモーフィズムとランタイム タイピング、一般的なコーディング スキル、および (さらに難しくしたい場合は) 解析理論など、さまざまな重要なスキルを調べることができるため、この質問は非常に豊富です。 .

ある時点で、志願者は、「+」、「-」、「*」、「/」などの二項演算子のみを使用していると仮定して、算術式を二分木として表現できることに気付きます。リーフ ノードはすべて数値であり、内部ノードはすべて演算子です。式を評価することは、木を歩くことを意味します。候補者がこれに気付いていない場合は、そっと誘導するか、必要に応じて伝えることができます。

と言ってしまっても、やはり面白い問題です。

質問の前半は、一部の人々 (名前は息が詰まるまで守りますが、イニシャルはウィリー・ルイスです) は、自分自身を開発者と呼んで Amazon で働きたい場合の仕事の要件であると感じていますが、実際にはちょっと難しいです。 . 問題は、「2 + (2)」などの算術式 (文字列など) から式ツリーにどのように移行するかです。ある時点で、この質問に対する ADJ チャレンジが行われる可能性があります。

後半は、これが 2 人のプロジェクトで、あなたのパートナー ("ウィリー" と呼びます) が文字列式をツリーに変換する責任があるとしましょう。簡単な部分を取得します。ウィリーがツリーを構築するクラスを決定する必要があります。任意の言語で実行できますが、いずれかを選択するようにしてください。そうしないと、ウィリーがアセンブリ言語を渡してくれます。彼が気難しいと感じているのは、もはや生産されていないプロセッサーのためでしょう。

どれだけ多くの候補者がこれを好んでいるかに驚かれることでしょう。

答えは言いませんが、Standard Bad Solution には、switch または case ステートメント (または単に古き良きカスケード if) の使用が含まれます。Slightly Better Solution には、関数ポインターのテーブルの使用が含まれ、おそらく最善の解決策には、ポリモーフィズムの使用が含まれます。いつかやり遂げることをお勧めします。楽しいもの!

それでは、3 つの方法すべてで問題に取り組みましょう。"2 + (2)" などの算術式 (文字列など) から、カスケード if、関数ポインターのテーブル、および/またはポリモーフィズムを使用した式ツリーにどのように移行しますか?

1 つ、2 つ、または 3 つすべてに自由に取り組んでください。

[更新: ほとんどの回答に一致するようにタイトルを変更しました。]

0 投票する
6 に答える
7292 参照

c# - 継承された仮想メソッドがサブクラスでオーバーライドされるのを防ぐことはできますか?

このようにレイアウトされたクラスがいくつかあります

次のコードを壊すことなく、C クラスが Render メソッドをオーバーライドするのを防ぐことは可能ですか?

0 投票する
11 に答える
21897 参照

delphi - Delphi での関数の再導入

reintroduceDelphi でキーワードを使用する動機は何ですか?

親クラスの仮想関数と同じ名前の関数を含む子クラスがあり、オーバーライド修飾子で宣言されていない場合、コンパイル エラーになります。このような状況で reintroduce 修飾子を追加すると、エラーは修正されますが、コンパイル エラーの理由を把握したことはありません。

0 投票する
12 に答える
62956 参照

c++ - 仮想関数と vtable はどのように実装されていますか?

C++ の仮想関数については誰もが知っていますが、深いレベルではどのように実装されているのでしょうか?

実行時に vtable を変更したり、直接アクセスしたりできますか?

vtable はすべてのクラスに存在しますか、それとも少なくとも 1 つの仮想関数を持つクラスにのみ存在しますか?

抽象クラスは、少なくとも 1 つのエントリの関数ポインタに対して単に NULL を持っていますか?

単一の仮想関数を使用すると、クラス全体が遅くなりますか? それとも、仮想の関数への呼び出しのみですか? また、仮想関数が実際に上書きされているかどうかにかかわらず、速度は影響を受けますか、それとも仮想である限り効果はありませんか。

0 投票する
8 に答える
108546 参照

c++ - 「純粋仮想関数呼び出し」のクラッシュはどこから発生しますか?

「純粋な仮想関数呼び出し」というエラーでコンピューターがクラッシュするプログラムに気付くことがあります。

抽象クラスからオブジェクトを作成できない場合、これらのプログラムはどのようにコンパイルされるのでしょうか?

0 投票する
7 に答える
8778 参照

oop - ポリモーフィズムとマルチプル ディスパッチの違いは何ですか?

……それとも同じものですか?それぞれに独自のウィキペディア エントリがあることに気付きました: PolymorphismMultiple Dispatchですが、概念がどのように異なるかを理解するのに苦労しています。

編集:そして、オーバーロードはこれらすべてにどのように適合しますか?

0 投票する
8 に答える
11526 参照

c# - Rubyでポリモーフィズムをどのように行いますか?

C# では、次のことができます。

明らかに、出力は次のとおりです (少し言い換えてあります)。

  • 横糸
  • 犬が寝ています
  • ニャー
  • 猫が寝ている

C# はその冗長な型構文で嘲笑されることが多いため、Ruby などのダック型言語でポリモーフィズム/仮想メソッドをどのように処理しますか?

0 投票する
21 に答える
291699 参照

java - ポリモーフィズム vs オーバーライド vs オーバーロード

Javaに関して、誰かが尋ねると:

ポリモーフィズムとは何ですか?

オーバーロードまたはオーバーライドは受け入れられる答えでしょうか?

それ以上のことが少しあると思います。

実装のないメソッドを定義した抽象基本クラスがあり、そのメソッドをサブクラスで定義した場合、それはまだオーバーライドされていますか?

過負荷は確かに正しい答えではないと思います。