我试图覆盖向量类并为其添加自定义函数,但是来自Java我并不熟悉覆盖,继承和那种东西的机制。
答案 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++);
}