問題タブ [upcasting]
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.
java - Java でのアップ キャストは、サブクラスのメソッドとフィールドを隠しますか?
私が書いているプログラムには、クラスRestrictedUser
とUser
派生したクラスがあります。RestrictedUser.
キャストしてユーザー固有のメソッドを非表示にしようとしていRestrictedUser
ますが、キャストしてもユーザーメソッドは引き続き使用できます。また、デバッガーを実行すると、変数の型がUser
.
Java でのアップ キャストはサブクラスのメソッドとフィールドを隠しますか、それとも何か間違っていますか? 回避策はありますか?
ありがとう
c# - ダウンキャストとアップキャスト
私はC#(およびOOP)が初めてです。次のようなコードがある場合:
質問 1 : これを行う他のコードがある場合:
ここEmployee
に がありますがManager
、そのようにキャストすると、Employee
それはアップキャストされていることを意味しますか?
質問 2 :
いくつかのEmployee
クラス オブジェクトがあり、すべてではないものの一部がManager
である場合、可能であればそれらをダウンキャストするにはどうすればよいですか?
c++ - アップキャストポインタ参照
私は次の不自然な例を持っています(実際のコードから来ています):
これをコンパイルしようとすると、次のようになります。
1)明らかにgccはコンストラクターによって混乱されています。コンストラクターから参照を削除すると、コードがコンパイルされます。だから私の仮定は、ポインタ参照のアップキャストで何かがうまくいかないということです。誰かがここで何が起こっているのか教えてもらえますか?
2)少し関係のない質問。コンストラクターで「他を削除」のような恐ろしいことをした場合(私と一緒に)、誰かがスタック上の何かへのポインターを私に渡した場合はどうなりますか?
ポインタがヒープ上の何かを合法的に指していることを確認するにはどうすればよいですか?
c++ - 純粋仮想基底クラスで明示的な関数を作成せずにコピー構築を行うことはできませんか?
私の目的は、クラスのディープ コピーを作成することですが、仮想クラスが問題を引き起こしています。
コンパイル エラー メッセージ:
Vir から継承し、独自のメンバー (float a; や double b; など) を持つ Handler クラス (Handler1、Handler2 など) をさらにたくさん用意する予定です。したがって、すべての Handler クラスのすべての getter および setter 関数を Vir クラスに保持することは意味がありません。メンバーは Handler クラスに固有であるため、getter メソッドと setter メソッドを Handler クラスに保持したいと考えています。コンパイラは私にそうすることを許可していません。ヘルプ?
c# - 仮想メソッドをオーバーライドしながら、C# で基本クラス バージョンを呼び出すにはどうすればよいですか?
オーバーライドされる仮想メソッドがある単純なクラス階層があります。しかし、特定のコールサイトでは、仮想メソッドではなく、このメソッドの基本クラス バージョンを呼び出したいと考えています。
例えば:
java - オブジェクトを作成するときのアップキャスト
Shape
基本クラスとさまざまな派生型があるとしますCircle
。
これを書くことによって、新しいオブジェクトを作成するときにすぐそこにアップキャストする理由はありますか?
これの代わりに:
そしてs
、これらの2つのステートメントのそれぞれによって作成されたオブジェクトは、互いに何らかの形で異なりますか?
c++ - CRTPでダウンキャストが有効であることをコンパイル時にチェックする方法は?
私は単純な古い CRPT を持っています (アクセス制限に気を取られないでください - 問題はそれらについてではありません):
これは通常、次のように使用することを目的としています。
今それは私をstatic_cast
悩ませます。(アップキャストではなく) ダウンキャストが必要なので、明示的なキャストを使用する必要があります。現在のオブジェクトが実際に派生クラスであるため、妥当なすべてのケースでキャストは有効です。
しかし、どうにかして階層を変更し、キャストが無効になったらどうしますか?
この場合、明示的なダウンキャストが有効であることをコンパイル時にチェックすることはできますか?
java - nullで関数を呼び出すと自動的にアップキャスト
このコードはを出力しMyUrgentException
ます。誰かが理由を説明できますか?
java - Javaでのアップキャストに問題がありますか?
誰かがこれが起こっている理由を説明できますか?
ただし、生成される出力は次のとおりです。
ご覧のとおり、アップキャストしているのに、なぜ.setType()
メソッドはスーパークラスメソッドではなくサブクラスメソッドを実行するのですか?
c++ - C ++ポリモーフィッククラス、仮想関数、パフォーマンスのためのキャスト
私は次のクラスを持っています:
すべてStateから継承する他のクラスがあります。それらの違いは、動作に依存するisTerm()の評価方法にのみあります。あらゆる種類の状態派生クラスで動作するように設計された他のテンプレートクラスがいくつかあるという事実がなければ、仮想関数burオーバーライド関数isTermを使用したくありません。それらの1つはポリシーです:
updateOptimalは、その状態のポリシーを検索するために、状態から派生したクラス(動作に応じて)を取得する必要があります。これは、状態*ptrから現在使用されているSタイプにアップキャストされます。さて、状態から派生したクラスはポリモーフィックであるため、私はそれが正しいことだと思いました。
ここで、iterはアクションのイテレーターであり、各アクションにはアクションのポインターがあります- State *nextstate;
>nextstateは他のポイントに設定されます。
State *nextstate;
使用と使用を避けるために、クラスAction全体をテンプレート化することもできますS *nextstate;
が、プロジェクト全体で膨大な量の変更が必要になります。
cplusplus.comのキャストチュートリアルを読むと、アップキャストまたはダウンキャストの前に型チェックを行うため、dynamic_castを使用するのが最善であると理解しています。ただし、キャスト後の次のコードでは、検索に使用する以外は、アップキャストされた状態に対して何もしません。
findPolicyは次のとおりです。
- 安全チェックをスキップして、静的キャストを使用しても大丈夫ですか?私はそれを試しました、そしてそれはコンパイルします。
- チェックを完全にスキップして、reinterpret_castを実行しても大丈夫ですか?私も試してみましたが、コンパイルされます。
- dynamic_castを実行した場合のペナルティは何ですか?小さなオーバーヘッドがあることは知っていますが、それは何か深刻なことですか?
- ポリモーフィッククラスを使用せずに(仮想関数を回避して単純にオーバーライドする)状態*ptrからSタイプ*ptrにアップキャストする方法はありますか?