0

dynamic_cast三段継承の場合はうまくいかないようです。

print()メソッド呼び出しの時点で、アプリケーションがセグメンテーション違反 (コア ダンプ) でクラッシュします ( をmain()参照)。

コードは次のとおりです。

#include <iostream>
#include <typeinfo>     //must be included to call any member functions for the typeinfo object returned by typeid()
using namespace std;
class CBase
{
public:
    virtual void print()
    {
        cout<<"CBase::print"<<endl;
    }
    virtual ~CBase()
    { }
};
class CDerivedA : public CBase
{
public:
    virtual void print()
    {
        cout<<"CDerivedA::print"<<endl;
    }
    virtual ~CDerivedA()
    {}
};
class CDerivedB : public CDerivedA
{
public:
    void print()
    {
        cout<<"CDerivedB::print"<<endl;
    }
};
int main()
{
    CBase* ptrB = new CDerivedA();
    CDerivedB* ptrDB = dynamic_cast<CDerivedB*>(ptrB);
    ptrDB->print();
    return 1;
}
4

1 に答える 1

4
于 2013-04-09T10:30:52.287 に答える