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

0 c++ overriding vector

我试图覆盖vector类并为它添加一个自定义函数,但是来自Java我不太熟悉覆盖,继承和那种东西的机制.

Mik*_*our 5

标准容器不是多态的,所以你不能覆盖它们的行为; 并且没有受保护的成员,所以没有必要继承它们以扩展它们.

虽然你可以这样做,正如另一个答案所建议的那样,你必须重新实现所有构造函数(或者,自2011年以来,明确地继承它们),因为那些不是继承的; 并且存在某人以多态方式对待它的危险,例如当类不支持时通过指向基类的指针删除.

而是通过在公共接口上运行的非成员函数添加功能:

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

更一般地说,遵循标准库的示例并编写在一般迭代器范围内运行的模板:

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