C多态性:从父类到子类
参见英文答案 >
When should static_cast,dynamic_cast,const_cast and reinterpret_cast be used?7个
在C中我们可以将子类指针转换为父类,但是有没有办法将它转换回来:从父类获得,从子类获得,给孩子类回来? 我的意思是: class Parent { ... }; class Child : public Parent { ... }; int main(int argc,char const *argv[]) { Child* child = new Child(); Parent* parent = child; Child* old_child = parent; // how to do this?? return 0; } 谢谢您的回答. 解决方法
是的,正如其他答案中所提到的,有两种方法可以做到这一点. Child * old_child = dynamic_cast<Child*>(parent); 可以在运行时检查 if(!old_child) { // parent is not a Child instance } 还要注意为了使其正常工作,所讨论的类需要有一个vtable,RTTI实际上可以确定它们的关系.实现此目的的最简单形式是为Parent类提供虚拟析构函数 class Parent { public: virtual ~Parent() {} // or // virtual ~Parent() = default; // as suggested for latest standards }; 注意:
template <class Derived> class Parent { void someFunc() { static_cast<Derived*>(this)->doSomething(); } }; class Child : public Parent<Child> { public: void doSomething(); }; 父<>的实例化的有效性.和static_cast<>将在编译时检查. 注意: > Derived的静态类成员> typedef由Derived提供> …更多类特征,可以在编译时检查 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |