【问题标题】:Assign Derived Pointer to a Different Derived Type in C++在 C++ 中将派生指针分配给不同的派生类型
【发布时间】:2018-02-24 22:42:16
【问题描述】:

如果它们共享相同的基类,有没有办法将指向派生对象的指针更改为指向不同类型的派生对象?我知道它可以与基类指针一起使用,但我对我目前的情况感到有些困惑。

例子:

struct a {};
struct b : a {};
struct c : a {};

int main()
{
  b* ptr = new b;
  ptr = new c;
}

【问题讨论】:

  • 不,这是不允许的。 b 不是 c
  • 你当然可以用演员表来做,但不要。

标签: c++ class oop pointers inheritance


【解决方案1】:

没有。 (如果您将 Apple 投射为橙色,则不允许并且显然会导致更多问题)

您可能是 C++ 新手。

假设你的变量中有一个变量

结构 b : a { int x; };

还有

结构 c : 一个 { }; 没有像您的示例代码那样的变量。

通过将 b 的 ptr 用作 c(如果您通过强制转换绕过编译器错误) 您将尝试访问 c 中不存在的变量 x。

【讨论】:

  • 你真的告诉我这可能是可能的,然后暗示我做不到,而且我是 C++ 新手。令人震惊。
  • 山姆,那不是我的本意。你可以在 C++ 中做很多不正确或不应该做的事情。您的示例代码将无法编译,因此我在一开始就说“不”。即使你解决了这个问题(通过强制转换错误)你也会遇到更多问题,这就是解释的内容。
  • 很抱歉造成误解。我的意图是将 ptr 的类型永久更改为 c 类型。很难用一个最小的工作示例来说明,但是在执行过程中不会再引用 b 对象,所以我实际上不会遇到这个错误。
猜你喜欢
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
相关资源
最近更新 更多