C++基类与派生类类型兼容原则

  1. 类B是类A的派生类,有程序:A *pa=new B;编译时没有错误,则根据类型兼容准则,以下的结论正确的是【 】

A.类B是类A的公有派生类;

B.类B是类A的私有有派生类;

C.类B是类A的受保护派生类;

D.无法判定。
是选A吗,为什么

类B继承自类A,否则无法使用A的指针指向B的对象。由于编译通过,继承访问权限不是私有的。所以可以排除选项B;没有更详细的信息判断到底是公有继承还是受保护继承,所以选项A和C都可能正确。

根据类型兼容准则,类B指针可以指向类A的对象,但类A指针不能指向类B的对象。因此,由于程序 "A *pa=new B;" 没有编译错误,可以得到结论:类B是类A的公有派生类。选项A是正确的。