转换为基类有效性

时间:2010-10-06 20:59:49

标签: c++ casting polymorphism

假设我有一个名为Base的类和一个名为SuperBase的类。鉴于add接受Base*,其中任何一个都有效:

SuperBase *super = new SuperBase;
bases.add(super);

SuperBase *super = new SuperBase;
bases.add((Base*)super);

3 个答案:

答案 0 :(得分:9)

只要SuperBase公开来自Base,通过从派生到基础的隐式转换,第一个就可以正常工作:

struct base { virtual ~base() {} };
struct derived : base {};

base* b = new derived; // okay

第二个也有效,但忽略了Base的保护:

struct derived : private base {}; // private base

base* b = new derived; // not okay, base is private
base* b = (base*)(new derived); // okay, but gross

如果它是private,你可能不应该使用它。

答案 1 :(得分:1)

两者都有效 - 可以在需要父级的引用/指针的地方使用子级。这称为多态。

答案 2 :(得分:1)

两者都有效,但不需要superBase*