首页 > 编程语言 >[C++] 强制类型转换(dynamic_cast和dynamic_Pointer_cast)

[C++] 强制类型转换(dynamic_cast和dynamic_Pointer_cast)

时间:2023-12-22 21:03:10浏览次数:40  
标签:类型转换 转换 dynamic Father Son cast 基类


  • 作者: 丶布布

1、指引或者引用的向上转换,向下转换
例如基类Father ,Son继承Father,派生类Son.。Father—>Son则为向下转换,Son—>Father则为向上转换。向上转换为隐士转换,向下转换需要dynamic_cast或者c的转换方式。

向上转换:

struct Father
{
  //基类Father
};
struct Son:Father
{
  //基类Father的派生类B
};
//1.普通指针转换
Son *son = new Son;
//派生类Son向上转换为基类Father
Father *father = son;
//2.智能指针转换
std::shared_ptr<Father> father(new Son(son));

此时son就是向上转换。无需显式转换既可以编译通过。

2、dynamic_cast
一般用于有继承关系的类之间的向下转换。

3、dynamic_pointer_cast
当指针是智能指针时候,向下转换,用dynamic_Cast 则编译不能通过,此时需要使用dynamic_pointer_cast。

向下转换(含智能指针):

struct Father
{
  //基类Father
};
struct Son:Father
{
  //基类Father的派生类B
};

std::shared_ptr<Father> father;
std::shared_ptr<Son> son = std::dynamic_pointer_cast<Son>(father);

戳戳小手帮忙点个免费的赞和关注吧,嘿嘿。


标签:类型转换,转换,dynamic,Father,Son,cast,基类
From: https://blog.51cto.com/u_16436086/8938558

相关文章

  • [C++ 从入门到精通] 6.static_cast、dynamic_cast等显示类型转换
    作者:丶布布文章预览:一.隐式类型转换二.显式类型转换(强制类型转换)static_cast显示转换dynamic_cast显示转换const_cast显示转换reinterpret_cast显示转换三.总结一.隐式类型转换含义:隐式类型转换:系统自动进行,不需要开发人员介入。intm=3+45.6;//48因为返回的int型......
  • Day04类型转换
    类型转换注意点:1.不能对布尔值进行转换2.不能把对象类型转换为不相干的类型3.在把高容量转换到低容量的时候,强制转换4.转换的时候可能存在内存溢出,或者精度问题!高转低,强制转换;低转高,自动转换低------------------------------------------->高byte,short,char->int-......
  • [Ynoi2007]rfplca/[CF1491H] Yuezheng Ling and Dynamic Tree
    题目描述给定一棵大小为\(n\)的\(1\)为根节点的树,树用如下方式给出:输入\(a_2,a_3,\dots,a_n\),保证\(1\leqa_i<i\),将\(a_i\)与\(i\)连边形成一棵树。接下来有\(m\)次操作,操作有两种:1lrx令\(a_i=\max(a_i-x,1)(l\leqi\leqr)\)。2uv查询在当前的\(a\)......
  • 浅谈C++类型转换函数
    reinterpret_castreinterpret_cast<newtype>(expression)将一个类型的指针转换为另一个类型的指针,它允许从一个指针转换为整数类型。voidtest01(){ chara=0; int*p=reinterpret_cast<int*>(&a); //不安全}const_cast常量const指针与普通指针之间的相互转化。如果不用......
  • Feedback Control of Dynamic Systems_P1
    GLOBALEDITION1.FeedbackControlofDynamicSystemsEIGHTHEDITIONFranklin\(\cdot\)Powell\(・\)Emami-NaeiniTableofLaplaceTransformsNumber$$F(s)$$$$f(t),t\geq0$$11$$\delta(t)$$2$$\frac{1}{s}$$$$1(t)$$3$$\frac{1}{s......
  • Feedback Control of Dynamic Systems_P2
    187.ProblemsforSection5.4:DesignUsingDynamicCompensation5.21Let\[G(s)=\frac{1}{s^{2}+7s+12}\\text{~}\text{and}\text{~}\D_{c}(s)=K\frac{(s+a)}{s+b}\]Usingroot-locustechniques,findthevaluesfortheparameters\(a,b\......
  • C 语言:类型转换与常量的细致理解
    C语言中的类型转换有时,您必须将一种数据类型的值转换为另一种类型。这称为类型转换隐式转换当您将一种类型的值分配给另一种类型的变量时,编译器会自动进行隐式转换。例如,如果您将一个int值分配给一个float类型://自动转换:inttofloatfloatmyFloat=9;printf("%f",......
  • 秦疆的Java课程笔记:72 面向对象 instanceof和类型转换
    instanceof关键字,用于判断左边的实例对象是否是右边的类的实例。先创建4个类,父类Person,其子类Student和Teacher,测试类Application。在Application中测试instanceof语句://父类publicclassPerson{}//子类publicclassTeacherextendsPerson{}//子类publicclassStud......
  • VectorCAST 对基于国产芯片的软件开发的支持
    随着汽车朝着电动化、自动化、智能化、网联化的“四化”趋势发展,芯片的研发和生产变得越来越关键。国产芯片代表着中国的科技雄心和自主创新的追求。实现这些目标需要面对严峻的技术挑战,其中之一就是确保国产芯片开发和应用的质量和可靠性。VectorCAST工具的应用为解决这一挑战提......
  • reinterpret_cast 和 static_cast
    reinterpret_cast和static_cast都是C++中的类型转换运算符,但它们的用途和行为有所不同。static_cast:static_cast用于执行比较“自然”和低风险的转换,如整型和浮点型、字符型之间的互相转换。它也可以用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。进行上行......