1. 问题简述:
有如下源代码:
Class BaseA;
Class BaseB;
Class SubClass:public BaseA,public BaseB
{
...
}
现有如下变量定义:
BaseA* insA = new SubClass(...);
BaseB* insB;
请问如何将insA指向的对象正确赋值给BaseB*的指针insB? 有下面两种方法:
- 既然我们知道insA是SubClass类型,可以先把父类的指针insA转换成子类的指针类型SubClass*,然后在上行转换成父类型BaseB:insB = (BaseB*)( ( SubClass* )insA)
- 调用C++的dynamic_cast函数,它会先做类型检查,以保证类型正确,如果不能转换,会出错:insB = dynamic_cast<BaseB*>(insA)
2. 例子剖析:
源代码:
#include <iostream>
using namespace std;
// class BaseA;
// class BaseB;
// class SubClass;
class BaseA
{
private:
int m_baseA;
int m_moreSpace;
public:
BaseA(int a = 0)
{
m_baseA = a;
//lala = 34;
m_moreSpace = 1111111;
}
virtual int getA()
{
return m_baseA;
}
virtual int getMoreSpace()
{
return m_moreSpace;
}
};
class BaseB
{
private:
int m_baseB;
public:
BaseB(int b = 0)
{
m_baseB = b;
}
virtual int getB()
{
return m_baseB;
}
virtual int forA()
{
cout<<"\t+++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
cout<<"\tyou call me ,haha!"<<endl;
cout<<"\t+++++++++++++++++++++++++++++++++++&