// 将Father* obj 父类对象 强转为 Son* 子类对象// 如果转换成功, 说明 obj 对象就是 Son 子类对象// 如果转换失败, 说明不是 Son 子类对象, 转换结果是 NULL , 也就是 0Son*son=dynamic_cast<Son*>(obj);if(son!=NULL){// 转换成功// 执行 Son 特有工作son->son_say();} 完整代码 , 参考...
此外, 函数接收 父类指针形参 作为参数 , 如果调用该函数 , 传入子类指针 , 此时涉及到将 子类指针 Son* 隐式转为 父类指针 Father* ; // 函数接收 父类对象 作为参数, 可传入子类对象 void objSay(Father* obj) { } // 调用函数, 传入子类对象指针 objSay(&son); 1. 2. 3. 4. 5. 6. 7. ...
//base->Dfun(); //ERR: Dfun不是Base的成员 子类转父类,安全,但是转换后,不能再使用子类的非虚函数, return 0; } dynamic_cast与继承层次的指针 对于“向下转型”有两种情况。一种是基类指针所指对象是派生类类型的,这种转换是安全的;另一种是基类指针所指对象为基类类型,在这种情况下dynamic_cast在运行...
通常,在C++中需要用到各种类型转换,典型的如const_cast, dynamic_cast, reinterpret_cast, static_cast。 这时讲两种实现办法: dynamic_cast和直接计算的办法 (1) dynamic_cast 最常用的,dynamic_cast: 动态类型转换,可以在父类与子类之间进行安全的类型转换,运行时类型检查,并且可以知道自己子类的类型。缺点是耗时...
父类没有定义虚函数,父类指针指向子类对象时,父类指针调用的函数还是父类的函数。 dynamic_cast可以实现将子类指针动态转换成父类指针(相当于父类指针指向了子类对象),用dynamic_cast时,父类必须要有virtual声明的虚函数。 父类指针转换成子类指针(也就是子类指针指向了父类对象)是危险的,dynamic_cast失败会返回NUL...
dynamic_cast⽤于类继承层次间的指针或引⽤转换。主要还是⽤于执⾏“安全的向下转型(safe downcasting)”,也即是基类对象的指针或引⽤转换为同⼀继承层次的其他指针或引⽤。⾄于“先上转型”(即派⽣类指针或引⽤类型转换为其基类类型),本⾝就是安全的,尽管可以使⽤dynamic_cast进⾏转换...
提示:dynamic_cast常用于向下转换(父类转子类),向上转换(子类转父类)本身就是安全的,不需要用到...
dynamic_cast主要用于类层次间的转换。对于上行转换(子类转父类),转换安全,成功返回类对象指针,此时与static_cast作用类似。对于下行转换(父类转子类),要求父类中存在虚函数,否则编译器报错。转换情况分为两种:a. 父类指针指向子类对象,转换安全,dynamic_cast返回类对象指针。b. 父类指针指向父...
dynamic_cast 的行为取决于转换的类型:若对指针执行转换,成功时返回正常转换后的对象指针,失败时返回 nullptr;若对引用执行转换,成功时返回正常转换后的对象引用,失败时抛出异常。dynamic_cast 的主要用途在于类层次间的转换。上行转换(子类转父类)时,转换安全,成功返回类对象指针,其作用与 static...
父类指针也可以称为基类指针,当父类(基类)指针指向派生类(子类)指针的时候,可以触发“多态的效果”。不过本文的重点不在“多态”,而是聊聊当父类指针和子类指针互相赋值时需要注意的问题。 废话不多说,直接看代码~ 假设我们有两个类,一个是Base父类,另一个是Derived子类。