問題タブ [virtual]
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.
c++ - 仮想/純粋仮想の説明
関数が仮想として定義されている場合、それは純粋な仮想と同じであるとはどういう意味ですか?
c# - メソッドを使用して基本クラスを実装し、派生クラスに強制的にオーバーライドさせる方法は?
このようなものを持つ:
私は別の投稿(仮想クラスの抽象メソッド)を読みました 魔女は私の質問にかなり似ていましたが、少し違いがあります。AAA.ToString() に基本動作を持たせ、派生クラスに強制的にオーバーライドさせたいと思います。
このようなことができることは知っていますが(下にスクロール)、適切な方法を探していました。
おそらく IAAA インターフェイスを作成して、次のように BBB クラスを構築することもできます。
しかし、私に正しく見えないでください。
c++ - これはどのくらい仮想的ですか?
理由を教えてください:
「Child::Method()」を出力し、これは:
「Parent::Method()」を出力しますか?
クラス:
ありがとう、イータム。
c++ - 仮想データ型/列挙型
次のような仮想クラスが必要です。
各派生構成が独自の EPromptIds セットを持つことができるように
これは、各クラスが Configuration::EPromptId パラメータ (このコードのように Configuration1::EPromptId または Configuration2::EPromptId ではない) を使用して仮想関数を実装する必要があるため、失敗します。
基本クラスにパラメーターの型を認識させて、各派生クラスで異なる値を定義することは可能ですか (おそらく、列挙型を使用せず、厳密に型指定したままにする、つまり int を使用しない)。
編集: 2 つの異なる「アプリケーション」に対して 2 つの異なる構成が必要です。プロンプトは db テーブルに保持できますが、各「アプリケーション」には独自のテーブルがあります。基本構成クラスへのポインターは、一部のハードウェアにインターフェースするクラス (つまり、実際の表示を行うクラス) に含まれています。ハードウェアは、ユーザー入力の要求と受信に使用できる io デバイスです。ハードウェア クラスが作成されると、正しい構成クラスへのポインターが渡されるため、要求されたときに正しいプロンプトが表示されます。
c++ - C++ 継承/VTable に関する質問
更新: デストラクタの例を単純なメソッド呼び出しの例に置き換えました。
やあ、
次のコードがある場合:
- B に VTable はありますか? B には仮想関数はありませんが、b::func0() から a::func0() を呼び出します
- func1 は VTable に存在しますか? 仮想ではありません。
- func2 は VTable に存在しますか?
- aa::func0() 呼び出しが b::func0() にない場合、上記の答えは異なりますか?
ありがとう
java - Javaバイトコードをネイティブに実行するハードウェアにJavaインタープリターを実装できますか?
Javaインタープリターをハードウェアに実装する場合、Javaバイトコードのアーキテクチャーの中立性をどのように実現できますか... JavaはJIT(ジャストインタイムインタープリター)を使用しますか?そして、これらすべてがオペレーティングシステムとJava仮想マシン(JVM)の仮想マシンの概念にどのように関連しているか
windows - 2つのゲームコントローラーからの入力を1つの「仮想」コントローラーに組み合わせる方法は?
次の状況をイメージしてください。
- Windows XPを使用しています(以下に示すダイアログはVistaのスクリーンショットですが)。
- 2つの物理USBゲームコントローラーがあります。それらをAとBと呼びましょう。
- ジョイスティックに従来の方法でアクセスし、1つのジョイスティックのみを認識して使用できるようにするソフトウェアがあります。
- このソフトウェアを使用する場合、たとえば、両方のコントローラーを一緒に使用する必要があります。
- Aの左のサムスティックとBの右のサムスティックを使用します
- Aのボタン#1、#2、#6とBのボタン#2、#8を使用します
この問題は、ハードコアゲームのどこかですでに発生していると思います。このための一種の「仮想ゲームコントローラードライバー」またはその他のソフトウェアが利用可能です。これは、理想的にはWindowsのゲームコントローラーとして表示され、物理的に接続されたコントローラーで使用可能な入力を使用して上記のような仮想セットアップを可能にし、複合仮想コントローラーを作成します。
もしそうなら、私はこれをどこで手に入れることができるか聞いてみたいです。そうでない場合は、これを実行するためのヒントを歓迎します。DirectInputを読んで、存在しないC ++スキルの隣にあるものを取り除く必要があると思いますか?
Runeborgが答えたように、これを実現したい場合は、独自の「仮想ゲームコントローラーデバイスドライバー」を作成しようとすると、ひびが入る可能性があります。:-(
クイックアップデート:別の群衆が既存の答えを思い付くかもしれないことを期待して、smartgamerに同じ質問をしました。
c++ - 誤ってダイヤモンドを作成することを防ぐために、仮想継承を使用してもよいですか?
これは実際のコードを簡略化したものであり、誰かが既に Foo を実装し、そこから派生していることに気付いていなかったときに犯した本当の間違いです。
編集:このコードを実行する必要がないように...
- そのまま実行すると、「失敗」(望ましくない、デバッグが難しい) が出力されます。
- 「oops」とマークされた行を削除すると、「Foo」(望ましい動作) が出力されます。
- 「おっと」を残して 2 つの継承を仮想化すると、コンパイルされません (ただし、少なくとも何を修正すればよいかはわかっています)。
- 「oops」を削除して仮想化すると、コンパイルされて「Foo」が出力されます (望ましい動作)。
仮想継承を使用すると、結果は良好またはコンパイラ エラーになります。仮想継承がなければ、結果は良好であるか、説明がつかず、デバッグが困難な実行時障害になります。
Foo が既に行っていたことを基本的に複製する Bar を実装すると、動的キャストが失敗し、実際のコードでは問題が発生しました。
最初は、コンパイル エラーがないことに驚きました。次に、仮想継承がないことに気付きました。これにより、GCC で「一意の最終オーバーライド機能がありません」というエラーが発生しました。この設計にはひし形が含まれていないはずなので、意図的に仮想継承を使用しないことにしました。
しかし、Base から派生するときに仮想継承を使用していれば、コードは (おっともなく) 正常に機能し、コンパイル時にダイアモンドについて警告され、実行時にバグを追跡する必要があったはずです。
質問は、仮想継承を使用して将来同様の間違いを犯さないようにすることは許容できると思いますか? ここで仮想継承を使用する正当な技術的理由 (私にはわかります) はありません。設計にひし形があってはならないからです。その設計上の制約を強制するためだけに存在します。
c++ - C++では、仮想関数をオーバーライドすると、関数は自動的に仮想になりますか?
iffoo
が classD
で宣言されていて、virtual とマークされていない場合、次のコードはfoo
inの実装を呼び出しますD
(の動的な型に関係なくd
)。
ただし、次のプログラムでは、そうではありません。誰でもこれを説明できますか?仮想関数をオーバーライドする場合、メソッドは自動的に仮想になりますか?
上記のプログラムの出力は次のとおりです。