派生类和基类之间指针指针的转换?

关于下面的C ++程序:

class Base { }; class Child : public Base { }; int main() { // Normal: using child as base is allowed Child *c = new Child(); Base *b = c; // Double pointers: apparently can't use Child** as Base** Child **cc = &c; Base **bb = cc; return 0; } 

GCC在最后的赋值语句上产生以下错误:

 error: invalid conversion from 'Child**' to 'Base**' 

我的问题分两部分:

  1. 为什么没有从Child **到Base **的隐式转换?
  2. 我可以使这个例子使用C风格的转换或reinterpret_cast 。 使用这些铸件意味着扔掉所有types的安全。 有没有什么我可以添加到类定义,使这些指针隐式static_cast转换,或至less短语转换的方式,使我可以使用static_cast

如果这是允许的,你可以这样写:

 *bb = new Base; 

c最终会指向Base一个实例。 坏。

Interesting Posts