問題タブ [derived-class]

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

c++ - 抽象クラスにアップキャストし、クラスが派生するたびに変更しない方法はありませんか?

コンパイラは言う

この問題のため、Abs クラスから継承する新しい派生クラスを作成するたびに、Abs クラスに関数を追加する必要があります (アップキャストは必須です。私が計画しているプログラムでは、そうする必要があります)。一度作成された基本クラスには触れたくありません。この問題は、基本クラスを作成すると、それを変更する必要がないという原則に違反していませんか。この問題を解決する方法はありますか? ps: 工場設計パターンとプロトタイプ設計パターンを見てきましたが、どちらも解決できないようです。

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

c++ - C++ は、配列型から派生したオブジェクトで配列を埋めます

C++ では、Player オブジェクトへのポインターの配列があり、それを Fickle オブジェクトで埋めたいと考えています。Fickle は Player から派生したクラスです。これは、Player クラスから派生したさまざまなクラスのさまざまなオブジェクトで満たすことができる一般的な Player 配列が必要だからです。

これどうやってするの?

Player オブジェクトへのポインタの配列を作成します

次に、配列を特定のサイズに初期化します

しかし、以下は何らかの理由で機能しません。

playerArray を Fickle オブジェクト (Fickel は Player から派生したクラス) で埋めるにはどうすればよいですか?

ありがとう。

アップデート:

エラーメッセージが表示されます (Eclipse IDE で):

気まぐれの定義と関係があるのではないかと思います。

Fickle.hpp ファイルには次のものが含まれます。

これでいいですか、それとも問題がありますか?

Player クラスのヘッダー ファイルには次のものが含まれます。

receive メソッドは、Fickle および Player クラスから派生した他のクラスでオーバーライドされます。

更新 2:

OK、エラーは実際にはコードの別の部分によるものだと思います。

Player はメソッド receive を定義します:

これは、サブクラス Fickle でオーバーライドする必要がありますが、Fickle での定義は次のとおりです。

エラーが発生します:

しかし、なぜこれがレシーブがPlayerクラスで定義されているためなのかわかりませんか?

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

c++ - ポリモーフィズムで子オブジェクトのオーバーロード関数を呼び出す方法は?

次の単純なポリモーフィズムを考えてみましょう...

私の知る限り、どちらの場合も実装Aが呼び出されます。

ptrの動的タイプに応じて、someFuncの「最も派生した」実装をどのように呼び出すことができますか?

私の実際のコードには多くの子タイプがあるため、dynamic_castを使用して子クラスごとにチェックするのは実用的ではありません。

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

c++ - CLASSNAMEを使用してテンプレートのタイプ名の指定を自動化する方法(口論);

ゲームワールド内のいくつかのオブジェクトの統計エディターを作成しています。オブジェクトタイプごとに複数の編集メニューを用意するのではなく、メニューを1つだけ用意し、編集中の統計へのポインターと作業を行うための関数を含むstat-edit-objectsのリスト/ベクトルを渡します。

私の主な問題は、ポインターがテンプレート派生クラスに格納されている変数のタイプを示す必要があることです。次のコードは小さな例ですが、これらの統計編集オブジェクトエントリが数百あると想定できます。

テンプレートのタイプ名を取得する方法はありますか

自動的に合格しましたか?

(注:typeは、StatEditObj_INTのコンストラクターの最初の引数用です)

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

c++ - 派生クラス c++ で保護された変数にアクセスできません

Binary Tree からの派生クラスとして Binary Search Tree があります。現在、再帰関数のルート (基本クラスにあります) にアクセスしようとしています。しかし、何らかの理由でエラーが発生し続けます:

これが私のクラス宣言です:

基本クラス:

ヘッダー ファイル (31 行目まで):

ルートを公開して何が起こるかを確認しようとしましたが、それでも同じエラーが発生しました。

どんな助けでも大歓迎です!

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

c++ - 派生クラスから基本クラスのコンストラクターを呼び出さない

基本クラスがあるとします:

そして派生クラス:

derClassのコンストラクターのインスタンスを作成すると 、baseClassが呼び出されます。どうすればこれを防ぐことができますか?

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

c++ - 基本クラスからオーバーライドされた関数を呼び出しますか?

私の質問は、おそらく例によって最もよく説明されるでしょう。

たとえば、基本クラスと派生クラスの 2 つのクラスがあります。

のインスタンスを作成するとderivedClass、コンストラクターbaseClassが呼び出され、そのコンストラクターfoo()から呼び出されます。問題は、baseClass のコンストラクターが独自の呼び出しを行っており、派生クラスがオーバーライドしfoo()たオーバーライドを呼び出していないことです。foo()関数の独自の定義ではなく、オーバーライドされた関数を baseClass に呼び出させる方法はありますか?

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

vb.net - 派生クラスの共有メソッド

2 つの派生クラスが使用する関数がありますが、3 つ目は使用しません。3 つの派生クラスの 1 つがそれを使用していなくても、基本クラスにそのままにしておくのは理にかなっていますか?

3番目のクラスを許可しないと考える唯一の方法は、基本的にベースから派生した中間クラスを作成することです。次に、共通関数を使用する2つは2番目のクラスから派生します。

3級は使わないようにして、本来使うべき2人には使わせることはできますか?

それは船外に出ているように見えますか、つまり、3番目のクラスから関数を呼び出そうとしない限り、それは問題ではないはずです。それをすべて防ぐ方法があれば興味がありました手間をかけずに一緒に。

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

c++ - 基底クラス参照から派生クラス メソッドを呼び出す

これにより、「Class Unusual_Material」がコンソールに表示されるようにしたいと思います。これを達成する方法はありますか?私のプログラムには、他のより具体的なマテリアルが派生するクラス Material があります。メソッド Material::foo() は、ほとんどのマテリアルに適した Material のメソッドを表しますが、まれに、異常なプロパティを持つマテリアルに対して別の foo() を定義する必要があります。

私のプログラムのすべてのオブジェクトには、Material フィールドが含まれています。それらに通常とは異なるマテリアルが割り当てられている場合は、派生した通常とは異なる foo が呼び出されるようにしたいと思います。

これはおそらく非常に簡単か不可能のどちらかですが、どちらにしてもわかりません。

ありがとう

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

c++ - その名前の文字列から派生クラスインスタンスを生成します。(すなわち、反射)

基本クラスがある場合:

そして、動的にロードされたモジュール(.so / .dll)で、これから派生したクラスを実装しました。

そして、ユーザーは、このライブラリがロードされると、のインスタンスを作成するように要求しますSomethingFromBase(たとえば、cinから名前を取得します)。そして、私たちには知識がありませんSomethingFromBase(つまり、if(inputstr == "SomethingFrombase") { ... } 作成する方法はありません。 SomethingFromBaseのインスタンス?

これは(標準の)C ++では不可能だとかなり確信していますが、SOが私を驚かせることを常に望んでいます!

ライブラリを追加することでこれが可能であれば、それについて知りたいと思います。ありがとう!

編集: cdhowieの答えを参照してください。この手法を実装するためのガイド: http ://www.linuxjournal.com/article/3687?page = 0,1 http://www.abstraction.net/ViewArticle.aspx?articleID=67