首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将基类指针强制转换为从它派生的类的指针?C++

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

Stack Overflow用户
提问于 2013-05-04 02:48:24
回答 2查看 1.5K关注 0票数 2

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

其中一个指针需要属于B类,这样我才能调用在B中声明的方法。

我该怎么做呢?

静态类型转换不是只允许您以相反的方式执行此操作吗?(B将被动态转换为类型A)。有人告诉我不要做c风格的演员阵容。重新解释类型转换可能是危险的?

我唯一能想到的另一种方法是静态类型转换。这是我在这里需要的吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-04 02:54:49

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BaseClass *bp = new DerivedClass();
...
DerivedClass *dp = dynamic_cast<DerivedClass*>(bp);
if (!dp) {
    cerr << "Not a derived class!" << endl;
}

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

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

票数 3
EN

Stack Overflow用户

发布于 2013-05-04 02:53:25

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

语法为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
B* p_b = static_cast< B* >( p_a );

// or:

B* p_b = dynamic_cast< B* >( p_a );
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16370094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文