如何覆盖像vector这样的c ++类

时间:2013-10-19 08:17:55

标签: c++ vector override

我试图覆盖向量类并为其添加自定义函数,但是来自Java我并不熟悉覆盖,继承和那种东西的机制。

1 个答案:

答案 0 :(得分:5)

标准容器不是多态的,因此您无法覆盖它们的行为;并且没有受保护的成员,所以没有必要继承它们来扩展它们。

虽然您可以这样做,但正如另一个答案所建议的那样,您将不得不重新实现所有构造函数(或者,自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++);
}