問題タブ [method-hiding]
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++ での実装の詳細の非表示
ヘッダーで定義されたインターフェイスから実装固有の詳細を隠したいので、更新時にコードを保守しやすく、コンパイルを高速化します (ただし、後者の統計はありません)。
ただし、2003 年以降は動的メモリまたは C++ を使用できません (11/14/17 は使用できません)。ブーストなどのライブラリも使用できません。アプリケーションはリアルタイムで組み込まれているため、効率が重要です。問題のコードは、ハードウェアに密接に結合されています。
PIMPL のイディオムを示唆する here のいくつかの投稿を見ましたが、間接性と動的メモリがこれを禁止しているようです。1 つのオプションは、クラスを事前に割り当ててポインターを設定することですが、これは柔軟性がないようです。
以下は、実装ファイルで関数と静的変数を使用する単純化された例です。カプセル化またはコンパイル プロセスに関連する問題はありますか? 制約が与えられた場合、他にどのように上記を達成できますか?
ヘッダーに詳細を含む例:
実装の詳細な例:
java - 継承とオーバーライド/メソッド非表示を使用したインスタンスおよび静的制御フロー
インスタンス制御フローと静的制御フローをいじっています。以下のコードに注目してください。
コードの出力は次のとおりです。
Main m1
コンストラクタ
私が知っている理由は次のとおりです。
まず、静的ブロックと変数は、上から下の親から子へと識別されましたmain()
。
次に、静的ブロックと変数の割り当てが実行されるため、main()
の実行が開始され、新しいMain
オブジェクトの作成が試行されます。
3番目に、親クラスのインスタンスブロックと変数が識別されます。次に、それらは上から下に実行されます。(その後、親クラスのコンストラクターが実行され、次に子クラスのインスタンス ブロックと変数が識別され、続いてそれらが上から下に実行され、最後に子クラスのコンストラクターが実行されます)。
というわけで、A 内のインスタンス ブロックは、`m1()` を呼び出します。次に、A のコンストラクターが実行されます。最後に、制御フローを main() に戻し、プログラムを終了します。
さて、A からの m1() の呼び出しは Main の m1() を呼び出す。しかし、両方の `m1()` メソッドを静的にし、他はすべてそのままにしておけば、A のインスタンス ブロックから `m1()` を呼び出すと、A の `m1()` が呼び出されます。
2 つの質問があります (なぜですか? 純粋に学術的な理由で、私はまだ Java を学んでいます):
- 両方の
m1()
メソッドが静的でない場合、A のインスタンス ブロックから A の m1() を呼び出すことは可能ですか? やってみましたthis.m1()
が、それでも Main の m1() が呼び出されました。(なぜですか?) - 両方の
m1()
メソッドが静的な場合、A のインスタンス ブロックから Main の m1() を呼び出すことは可能ですか? (私はノーだと思いますが、確かではありません)。
最初のケースではオーバーライドが行われており、2 番目のケースではメソッドの隠蔽が行われています。しかし、その知識に基づいて質問に答える方法はまだわかりません。
java - `java.lang.Integer` のインスタンス メソッド `hashCode` が、独自の整数値を単純に返すために静的クラス メソッドにジャンプするのはなぜですか?
hashCode() メソッドのさまざまな種類の実装を調べていました。java.lang.Integer クラスを開いて、hashCode() の次の実装を見つけました。
私の質問は、実装を次のように単純にできないのはなぜですか。
値を渡して同じものを返すために追加の静的メソッドを作成する必要は何ですか? ここで重要な詳細を見落としていますか?