誰もがC++での動的キャストの意味を正確に知ることができます。このダイナミックキャスティングはどこで正確に使用できますか?これはインタビューで私に尋ねられました、そして私はこの質問のために空白になりました:)。
35437 次
3 に答える
9
dynamic_cast は、実行時にオブジェクトのクラスを見つけるためのキャスト メソッドです。
class Base
{
public:
virtual bool func1();
};
class Derived1 : Base
{
public:
virtual bool func1();
virtual bool funcDer1();
};
class Derived2 : Base
{
public:
virtual bool func1();
virtual bool funcDer2();
};
Base* pDer1 = new Derived1;
Base* pDer2 = new Derived2;
Derived2* pDerCasted = dynamic_cast<Derived2*>(pDer2);
if(pDerCasted)
{
pDerCasted->funcDer2();
}
-> We cannot call funcDer2 with pDer2 as it points to Base class
-> dynamic_cast converts the object to Derived2 footprint
-> in case it fails to do so, it returns NULL .( throws bad_cast in case of reference)
注: 通常、Dynamic_cast は慎重に OO を設計して避ける必要があります。
于 2009-11-23T08:31:53.417 に答える
2
最初の古い答えを検索してみてください
于 2009-11-23T08:25:23.563 に答える
0
動的キャストは、実行時にオブジェクトインスタンスのタイプを安全に検出します。
これは、コンパイラが参照テーブルを生成することによって実現されます。参照テーブルは、かなり大きくなる可能性があります。このため、プログラマーがこの機能を使用していないことを知っている場合、コンパイル中に無効になることがよくあります。
于 2009-11-23T08:23:37.750 に答える