c++ - 将派生类的构造函数中的项插入基类的私有(private) std::vector 的最佳方法?

标签 c++ inheritance stl

我有这些类(class):

class Base
{
...
private:
std::vector<X> v;
};

class Derived : public Base
{
Derived(X*, int n);
};

其中向 Derived 的构造函数传递了一个项目 X 的​​数组,我需要将其插入到 Base 类中的 vector v 中。 (X是智能指针)

目前我看到有两种方法可以做到这一点:

  1. 在 Base 中创建一个函数: InsertItem(X*) 将插入一个 将项目放入 vector 中(1 x 1)
  2. 在 Derived 中创建一个 vector ,其中包含 完整列表,然后通过 移动整个 vector 。

我看不出 #2 有任何优势,但想知道 #1 是否是一个好的解决方案,或者是否有更好的方法来做到这一点。

谢谢!

最佳答案

如果可以修改 Base,还有第三种选择。您可以使 vector protected 允许基类完全访问:

class Base
{
...
protected:
    std::vector<X> v;
};

您的基类现在可以直接操作 v。如果您需要将大部分 vector 功能公开给 Derived,这是最简单的方法。

如果没有,我将只添加一个函数(即选项 #1)并使其受到保护:

class Base
{
...

protected:
    void push_back(const X &x)
    {
        v.push_back(x);
    }

private:
    std::vector<X> v;
};

关于c++ - 将派生类的构造函数中的项插入基类的私有(private) std::vector 的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2588803/

相关文章:

c++ - 发生 PIE 链接错误时不能使用针对 `.bss' 的重定位 R_X86_64_32S

c++ - 关于 C++ 中 STL 填充函数的问题

c++ - 用结构(无类)cout 样式重载 "<<"

c++ - C++和STL都不包含多维数组的原因是什么?

c++ - 尝试在netbeans c++中导入dll

c++ - 与 const 成员成对的 vector

Java对象序列化和继承

c++ - boost::sp_convertible 的解释

java - 初学者的继承

c++ - 使用 STL 在 C++ 中实现 Bentley-Ottmann