重写push_back c ++

Ian*_*Ian 2 c++ inheritance overriding overloading vector

我有一个名为Pathextends 的类std::vector<Square *>,其中Square也是我创建的类.这Path将作为实体遍历2D环境的指南.我需要获得最长路径和最短路径,因此我希望找到Squaresa中两个之间的平方数Path.要做到这一点,我觉得重载是有益的std::vector<Square *>::push_back(const value_type &__x),虽然我不确定它的语法是什么.我目前正在尝试这个:

class Path : public std::vector<Square *>
{   //... functional stuff, not relevant. 
    int length;
public:
    push_back(const value_type &__x)
    {   Square *last_square = this->at(this->size() - 1);

        // how do I call super class push_back?
        // however that works, I push back &__x square here.

        Square *most_recent = (Square *)&__x;
        int delta_x = compare_distance(last_square, most_recent);
        length += delta_x;
    };
    int path_length() { return length; };
};
Run Code Online (Sandbox Code Playgroud)

当然,我想我可以编写一个方法,我为超类调用push_back,但我觉得覆盖函数更简洁,而且我学习如何正确覆盖stl函数是一个好习惯.

谢谢!

Mat*_* M. 17

另外,对我来说,学习如何正确覆盖stl函数是一种很好的做法.

实际上,事实并非如此.

STL容器并不意味着继承(没有virtual方法),因此良好的做法是使用组合并为您的类提供有意义的接口,使用STL容器方法来实现其目标.