問題タブ [run-time-polymorphism]
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++ - 非仮想関数を呼び出す仮想関数、およびその逆
のclass A
基本クラスとして がありclass B
ます。
以下で説明するように、仮想関数内で非仮想関数を呼び出しました。abc()
xyz()
ランタイム ポリモーフィズムにより、B:xyz
が呼び出されます – これは理解しています。
ただし、非仮想関数のように、なぜその後にB:abc
and notが続くのかわかりません。A:abc
abc
注意: 次の質問に出くわしました:非仮想関数を呼び出す仮想関数。仮想関数内での呼び出しabc()
は と同等this->abc()
であり、したがって出力であることが言及されています。ただし、この部分を理解しているかどうかはわかりません。
反対のことを行うと(つまり、仮想関数を呼び出す非仮想関数)、その時間に正確なランタイムポリモーフィズムが表示されるためです。その場合、this ポインターはどうなりますか?
c++ - dynamic_cast<> のオーバーヘッドはどれくらいですか
そのため、しばらくの間 C++ でプログラミングを行っていましたが、動的キャストを使用して、抽象クラス ポインターのポインターを別の具象クラス ポインターにキャストすることは悪い習慣であると言われました。
Shape は抽象クラスで、Triangle はそれを継承します。
動的キャストの使用は、継承されたクラスの 1 つが少し異なりすぎて、抽象クラスに含まれる一般的な関数以上のものを必要とする場合に、メンバー関数にアクセスする便利な方法のように思えます。何が悪いのか、実行時のポリモーフィズムのオーバーヘッドは何なのかと思っていました。