繁体   English   中英

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

[英]Adding derived class objects to vector with base interface class parameter

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

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

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

std::vector<A*> myVector

和方法:

add(A* item).

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

我试着把它写成:

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

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

不允许转换为无法访问的基类“A”

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

错误

不允许转换为无法访问的基类“A”

意味着当B派生自A时你没有使用公共继承。 如果在指定类继承时省略public关键字,则默认继承是private(请注意,对于struct ,缺省值是public inheritance)。

class B : /* private */ A

应该

class B : public A

回答你的上一个问题:

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

是。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM