是否可以从父类指针向下转换为第二个子类中的子类指针?

Posted

技术标签:

【中文标题】是否可以从父类指针向下转换为第二个子类中的子类指针?【英文标题】:is it possible to down cast from parent class pointer to child class pointer inside a second child class? 【发布时间】:2021-02-10 02:18:46 【问题描述】:

共有abc三个类。 bc 都是 a 的子级。 有没有办法从a 的指针向下转换为c 类内部的b 的指针? 希望我正确地解释了自己。 提前感谢您的帮助。

【问题讨论】:

“希望我能正确解释自己。” 你打算做什么的示例代码呢?比散文更好更简洁。 “在c 类中”应该与在一个或另一个函数中没有什么区别。如果您在尝试沮丧时遇到问题,则可能有关于您如何做或在您的特定情况下的详细信息,而这些详细信息未包含在对情况的抽象描述中。 【参考方案1】:

你的问题“有没有可能……”的答案是肯定的。

但是,对它的需求表明设计不佳。你要对向下转换指针做的任何事情都应该通过虚函数来完成。

在极少数情况下您需要它(请解释您的用例以查看它是否属于其中之一),您应该使用 C++ dynamic_cast<>,而不是 C 风格的转换。

您的设计中更大的问题是 - c 类不应该知道 b 类。

【讨论】:

【参考方案2】:
Class C : public A 
... 
   A* x1;
   B* b1 = (B*)x1;
// or
   A x2;
   B* b2 = (B*)(&x2);
...

【讨论】:

不要使用 C 风格的强制转换。

以上是关于是否可以从父类指针向下转换为第二个子类中的子类指针?的主要内容,如果未能解决你的问题,请参考以下文章

第49课 多态的概念和意义

自动将父类中的 shared_ptr 向下转换为子类类型

子类指针转换成父类指针时,指针值会变化

父类子类指针相互转换问题

php父类中访问子类的静态属性

java向上转型和向下转型