C++多继承动态交叉转换dynamic_cast

本文详细探讨了C++中多继承情况下如何使用dynamic_cast进行动态交叉转换。通过实例代码分析,解释了dynamic_cast在类型检查和转换过程中的作用,确保在多态类层次结构中安全地转换指针。
摘要由CSDN通过智能技术生成

1. 问题简述:

         有如下源代码:
         
Class BaseA;
Class BaseB;
Class SubClass:public BaseA,public BaseB
{
...
}
      现有如下变量定义:
 
BaseA* insA = new SubClass(...);
BaseB* insB;
请问如何将insA指向的对象正确赋值给BaseB*的指针insB? 有下面两种方法:
  1. 既然我们知道insA是SubClass类型,可以先把父类的指针insA转换成子类的指针类型SubClass*,然后在上行转换成父类型BaseB:insB = (BaseB*)( ( SubClass* )insA)
  2. 调用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+++++++++++++++++++++++++++++++++++&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值