使用基本接口类参数将派生类对象添加到向量

时间:2014-03-19 00:30:54

标签: c++ inheritance abstract-class abstract pure-virtual

我有一个抽象类(纯虚拟类/接口),我们将其命名为A.

我有一个从A派生的B类,它实现了A的纯虚方法。

我有一个C类,其成员是指向A:

的指针的向量
std::vector<A*> myVector

和方法:

add(A* item).

在从C派生的类D中,我想使用从类C派生的add方法添加类B的实例/对象。

我尝试把它写成:

for(int i = 0; i < 10; i++)
{
    C::add( (A*) new B());
}

我不确定这是否符合我的要求?如果我省略(A *),我会得到错误:

  

转换为无法访问的基类&#34; A&#34;不允许

我是否成功将B类对象指针添加到向量?

1 个答案:

答案 0 :(得分:2)

错误

  

转换为无法访问的基类&#34; A&#34;不允许

表示当B派生自A时,您未使用公共继承。如果在指定类继承时省略public关键字,则默认继承是私有的(请注意,对于struct,默认为公共继承)。

class B : /* private */ A

应该是

class B : public A

回答你的上一个问题:

  

我是否成功将B类对象指针添加到向量?