如何将基类指针转换为从它派生的类的指针? C ++

时间:2013-05-04 02:48:24

标签: c++ pointers casting

我通过参数将(A类)的2个指针传递给它的派生类(B类)。

其中一个指针必须是B类,以便我可以调用在B中声明的方法。

我该怎么做?

静态演员不会让你以相反的方式做到吗? (B要动态转换为A型)。我被告知不要做c式演员表演。重新解释演员阵容可能很危险吗?

我唯一能想到的是静态演员。这就是我需要的吗?

由于

2 个答案:

答案 0 :(得分:3)

您可以使用static_castdynamic_cast来实现此目的。两者之间的区别在于dynamic_cast将在运行时检查指针是否实际指向派生类的对象(这要求至少有一个virtual成员函数(包括。基类中的析构函数)。如果您确定可以进行强制转换,那么static_cast只会在没有运行时检查的情况下执行此操作。

语法为:

B* p_b = static_cast< B* >( p_a );

// or:

B* p_b = dynamic_cast< B* >( p_a );

答案 1 :(得分:3)

通常,您希望通过仅使用基础中声明为virtual的成员函数来避免这种情况。如果必须强制转换指向派生类的指针,请确保基类至少有一个virtual函数(任何函数或析构函数就足够了),然后使用dynamic_cast<T>

BaseClass *bp = new DerivedClass();
...
DerivedClass *dp = dynamic_cast<DerivedClass*>(bp);
if (!dp) {
    cerr << "Not a derived class!" << endl;
}

如果bp指向DerivedClass,则动态投射会成功;否则,它失败,并返回一个空指针。

您可能需要使用特殊标志进行编译才能启用RTTI支持。