問題タブ [pure-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++の純粋仮想メソッド
このデモプログラムを検討してください。
これにより、次のコンパイルエラーが発生します。
私の望みは、派生クラスがそれを定義していないので、obj.f()への呼び出しがへの呼び出しになり、それがクラスBaseの定義ごとにへの呼び出しになることでした。Base::obj.f()Derived::obj.f(0)
私はここで何が間違っているのですか?これを達成する方法はありますか?obj.f()具体的には、への呼び出しで10を返したいのですが。
(これを解決するためにデフォルトの引数を使用できることにも注意してください。ただし、このコードは私の問題の簡潔な例にすぎないため、デフォルトの引数を使用するように言わないでください。)
ありがとう。
c++ - プライベート継承:基本クラス(純粋仮想メソッドを持っている)のオブジェクトを作成するにはどうすればよいですか?
次のコードを検討してください。
上記のコードでは、「Derived」タイプのオブジェクトを作成できます。C ++を使用すると、Derivedクラスの「someMethod()」からメソッド「methodDefinedInBase()」にアクセスできます。しかし、「Base」タイプのオブジェクトを作成するにはどうすればよいですか?
ありがとう、
ヴィシュヌ。
c++ - 関数の宣言を0に設定するとはどういう意味ですか?関数に整数を割り当てるにはどうすればよいですか?
ウィンドウクラスで次の関数定義を見つけたときに、Windows APIをラップした(名前ではなく)GUIツールキットのソースを参照していました。
ここで何が起きてるの?整数に関数を割り当てるにはどうすればよいですか?それともそれをに割り当てNULLますか?wndprocで関数ポインタを使用する場合は、これを行う必要がありますか?
c++ - サブクラスの純粋仮想宣言
私は次のようないくつかのC++インターフェースを持っています:
IThose は独自のメソッドを実装するだけでなく、他のインターフェイスからのメソッドも実装することに注意してください。そのため、の実装者は両方を実装IThoseする必要があります。
質問:doThesethingsで再宣言する必要がありIThoseますか?
そうでない場合、私がそれをしたらどうなりますか?ITheseメソッドをシャドーしますか?
c++ - 純粋な仮想を仮想に変更し、バイナリ互換性を維持します
バイナリ互換性の問題が発生することなく、純粋仮想関数(基本クラス内)を非純粋になるように変更できますか?(Linux、GCC 4.1)
ありがとう
c++ - C++ の子関数の純粋仮想関数と未使用の引数
私は次のものを持っています:
foo(...) は純粋仮想関数であるため、親実装はありません。親は、foo が 2 つのベクトル引数を取ると述べています。子は 2 つの文字列引数を使用して正しく実装しますが、それらは使用されません。ただし、親の一部の子はこれらの引数を使用するため、常にそこにある必要があります。
親がそうしなければならないと言っていても、オーバーロードを使用して、指定された Child クラスの foo が引数を持たないようにする方法はありますか?
どうもありがとう。
c++ - 仮想メソッドを純粋にする必要があるのはいつですか?
私が取り組んでいるいくつかのコードを見つけたので、最適な設計実装は何かと考えていました。
基本クラスがメソッドを仮想として定義しているが、空の本体も実装しているため、派生クラスが本体を実装する必要がない場合、代わりに純粋にするべきではありませんか?
- 現在のコード。
- アイデア 1: この派生オブジェクトがこのメソッド本体を実装していないことをユーザーに警告します。
- アイデア 2: 派生クラスに、空であろうとなかろうと、本体を実装するように強制します。
信頼できる素晴らしい SO の人々はどう思いますか?
Edit1:投稿(および回答を読んだ後)後、アサートが悪いことに気付きました!
c++ - 純粋仮想デストラクタの目的は何ですか?
重複の可能性:
純粋仮想関数の実装を提供することは、どのような状況で有利ですか?
C++ で純粋な仮想デストラクタが必要なのはなぜですか?
純粋なデストラクタがChild classある場合、コンパイラはデストラクタの実装を強制しません。Basevirtual
面白い部分はそれです。コンパイラはむしろBase、デストラクタ本体を定義するように強制します。これは理解されています。(参考までにデモ)
それでは、クラスに純粋なデストラクタを持つ目的は何ですか? (オブジェクトの作成を禁止するだけですか?)virtualBaseBase
c++ - C++ map.clear() 純粋仮想メソッドの実行時エラー
この問題は、boost::shared_ptrs をキー値として使用したことが原因である可能性があると思います。
foo も bar も抽象クラスではありません。その時点で、実行時に「純粋仮想メソッドが呼び出されました」というエラーが表示され、プログラムが終了します。また、マップを反復処理して myMap.erase(iterator) を使用しようとしましたが、同じエラーが発生しました。
c++ - インターフェイスの一部ではないインターフェイスを実装するクラスの関数へのアクセス
私はc++でアプリケーションを書いています。さまざまな関数で定義されたインターフェイスがあります。
次に、このインターフェイスを実装するクラスと追加の関数を用意します。
単体テストからこれら 3 つの関数すべてにアクセスしたいと考えています。現在私は使用しています:
インターフェイスで定義された 2 つの関数にのみアクセスできます。インターフェイスで定義せずに関数 z() にアクセスするにはどうすればよいですか?