class CBase
{
public:
int m_base;
void SetBase()
{
m_base = 5;
cout<<m_base<<endl;
}
virtual void func()
{}
};class CA:public CBase
{
public:
int m_a;
void SetA()
{
m_a = 6;
cout<<m_a<<endl;
}
virtual void func()
{
cout<<"CA"<<endl;
}
};class CB:public CBase
{
public:
int m_b;
void SetC()
{
m_b = 7;
cout<<m_b<<endl;
}
virtual void func()
{
cout<<"CB"<<endl;
}
};void main()
{
CBase* pBase = new CBase;
pBase->SetBase();
CA* pA = dynamic_cast<CA*>(pBase); //////////////////用static_cast没问题
if(pA)
{
pA->SetA();
cout<<"the address of pBase"<<(long)pBase<<endl;
cout<<"the address of pA"<<(long)pA<<endl;
}
}
CA* pA = dynamic_cast<CA*>(pBase); 编译通过,运行报错。请问这样用为什么不对??
{
public:
int m_base;
void SetBase()
{
m_base = 5;
cout<<m_base<<endl;
}
virtual void func()
{}
};class CA:public CBase
{
public:
int m_a;
void SetA()
{
m_a = 6;
cout<<m_a<<endl;
}
virtual void func()
{
cout<<"CA"<<endl;
}
};class CB:public CBase
{
public:
int m_b;
void SetC()
{
m_b = 7;
cout<<m_b<<endl;
}
virtual void func()
{
cout<<"CB"<<endl;
}
};void main()
{
CBase* pBase = new CBase;
pBase->SetBase();
CA* pA = dynamic_cast<CA*>(pBase); //////////////////用static_cast没问题
if(pA)
{
pA->SetA();
cout<<"the address of pBase"<<(long)pBase<<endl;
cout<<"the address of pA"<<(long)pA<<endl;
}
}
CA* pA = dynamic_cast<CA*>(pBase); 编译通过,运行报错。请问这样用为什么不对??
这句话将按CBase类给pBase分配的空间,
这显然不满足 CA* 类型的要求,如果改成 CBase* pBase = new CA;
把pBase声明成CBase*类型的,但空间分配是按照CA类的
dynamic_cast<CA*>会成功测试环境 Dev-Cpp 4990 通过
参考文献《Inside C++ Object Module》(有空看看)