0

誰もがC++での動的キャストの意味を正確に知ることができます。このダイナミックキャスティングはどこで正確に使用できますか?これはインタビューで私に尋ねられました、そして私はこの質問のために空白になりました:)。

4

3 に答える 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 に答える