继承向量和初始化

时间:2010-12-22 21:03:27

标签: c++ inheritance vector

尝试从C ++向量继承一个类并在构造函数中初始化它。我该怎么做?例如:

class Dataset:public std::vector<float>{
    public:
            Dataset(vector<float> val):*baseclass*(val){}
            // bruteforce way. // Dataset(vector<float> val){//for every val[i] call push_back(val[i]);}

当然没有什么作为 baseclass ,我的意思是上面的语句是我想用val初始化向量的数据。如果没有push_back每个元素,我该怎么做?

2 个答案:

答案 0 :(得分:8)

不要派生自std::vector<>。这个课程从未打算从中衍生出来。请将类的实例用作成员:

struct Owns {
    Owns() : the_vector_(42, 128) { }

private:
    std::vector<float> the_vector_;
};

答案 1 :(得分:4)

你可以写:

Dataset(const vector<float> &val): std::vector<float>(val) {}

但最后,你真的不应该从std::vector公开继承。有多个提示表明std::vector并不意味着派生出来:

  • 没有虚拟析构函数
  • 没有受保护的会员
  • 无虚拟功能

您无法阻止任何人将您的Dataset对象视为std::vector<float>,因为公共继承意味着Dataset std::vector<float>如果有人试图通过Database指针删除std::vector<float>对象,这将失败。

如果您想重复使用 std::vector,请使用私有std::vector成员,或私下继承并公开using声明应包含的内容。