向具有基接口类参数的向量添加派生类对象

Adding derived class objects to vector with base interface class parameter

本文关键字:向量 添加 派生 对象 参数 接口      更新时间:2023-10-16

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

我有一个类B,它派生自a,并实现了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*),我得到错误:

不允许转换为不可访问的基类"A"

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

错误

不允许转换为不可访问的基类"A"

意味着当BA派生时,您没有使用公共继承。如果在指定类继承时省略public关键字,则默认继承为私有继承(注意,对于struct,默认继承为公共继承)。

class B : /* private */ A
应该

class B : public A

回答你最后一个问题:

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

是的。