// 向下强制类型转换 pd = dynamic_cast<D *>(&b); if(pd) { printf("ok\n"); } else { printf("error\n"); } pb = &d; // 基类指针必须先指向派生类才可以转换 pd = dynamic_cast<D *>(pb); // 将基类对象指针转为派生类对象指针 if(pd) { printf("ok\n"); } else { printf("...
我稍微了解了一下C++中的类型转换。从以前使用C语言的经验来看,通常会用到普通的(type)类型转换,例如对于一些void *类型的处理。但是在C++中有dynamic_cast、reinterpret_cast、static_cast等转换方式。问题/疑问就在于当需要进行基类指针和派生类指针之间的转换时,应该使用上述哪种类型转换方式。我们...
是一种在面向对象编程中常用的技术,用于将基类对象指针转换为派生类对象引用,以便可以访问派生类特有的成员和方法。 在C++中,可以使用dynamic_cast运算符来进行基类指针到派生类引用的强制转换。dynamic_cast会在运行时检查类型转换的有效性,如果转换是合法的,则返回指向派生类对象的引用;如果转换是非法的,则返回空指针。
class WrapperImpBase { public: WrapperImpBase(){} virtual WrapperImpBase* clone() = 0; ...
dynamic_cast 是执行显式安全向下转换。只有当基类具有虚函数,且此时的基类指针具有正确的子类类型时,dynamic_cast才会返回正确的指针,否则返回0。安全性体现在这个地方,只能将基类指针向下转换为正确的子类类型。至于你用static_cast可以实现这个功能,是因为static_cast是执行强制转换,是一种不安全的转换...
基类的public成员和protected成员被继承后成为派生类的private成员,派生类的其它成员可以直接访问它们,但是...