如何覆盖类似于C ++的矢量类(How to override c++ class like vec

2019-11-02 14:31发布

我试图重写向量类,并添加自定义的功能,但是从Java未来我不是很熟悉的覆盖,在继承的力学和诸如此类的东西。

Answer 1:

标准容器不是多态的,所以你不能覆盖自己的行为; 并且没有保护成员,所以没有延长他们一点从他们那里继承。

当你能做到这一点,正如另一个答案的建议,你将不得不重新实现所有构造函数(或者,自2011年以来,明确继承它们),因为这些是不能继承的; 而有一个人多态对待它,例如通过指针的基类,上课的时候不支持删除的危险。

相反,通过公共接口上运行非成员函数添加功能:

template <typename T>
void frobnicate(std::vector<T> & v) {for (auto & x : v) frobnicate(x);}

更一般地,遵循标准库的例子,编写模板在一般的迭代器区间操作:

template <typename InputIterator>
void frobnicate(InputIterator begin, InputIterator end) {
    while (begin != end) frobnicate(*begin++);
}


文章来源: How to override c++ class like vector