c++ - 使用基接口(interface)类参数将派生类对象添加到 vector 中

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

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

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

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

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*),我会收到错误消息:

Conversion to inaccessible base class "A" is not allowed

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

最佳答案

错误

Conversion to inaccessible base class "A" is not allowed

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

class B : /* private */ A

应该是

class B : public A

回答你的最后一个问题:

Did I successfully add B class object pointers to the vector?

是的。

关于c++ - 使用基接口(interface)类参数将派生类对象添加到 vector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22493912/

相关文章:

c++ - 从文件中获取数据并从另一个类构造以将其保存在 Vector C++ 中的类函数

c# - 抽象类设计

java - 抽象类 :-Real Time Example

c++ - 如何处理空参数包的情况

c++ - 如何指向具有函数重载的函数?

c++ - 如何使用 C++ 将 Windows 系统时钟设置为正确的本地时间?

c++ - 扩展类

python - 一个类如何从另一个类继承?

c# - 一个抽象类继承另一个抽象类的问题

java - 实现 java Comparable<T> 类的问题