Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我应该如何为采用数组的基类函数提供一个采用单个元素的方便函数_C++_Inheritance - Fatal编程技术网

C++ 我应该如何为采用数组的基类函数提供一个采用单个元素的方便函数

C++ 我应该如何为采用数组的基类函数提供一个采用单个元素的方便函数,c++,inheritance,C++,Inheritance,假设我有一个基类声明了一个纯虚函数do_sth(),它接受一个向量,但在派生类中通常只使用带有单个元素的向量。 因此,为了方便起见,我想提供dou_sth()的第二个版本,使用单个元素。我不想在每个派生类中实现第二个版本 从基开始,因为它的目的只是调用使用向量的版本。因此,我的想法是在基类中实现它,如下所示: class Base { virtual void do_sth(const std::vector<int>& v) = 0; void do_sth

假设我有一个基类声明了一个纯虚函数do_sth(),它接受一个向量,但在派生类中通常只使用带有单个元素的向量。 因此,为了方便起见,我想提供dou_sth()的第二个版本,使用单个元素。我不想在每个派生类中实现第二个版本 从基开始,因为它的目的只是调用使用向量的版本。因此,我的想法是在基类中实现它,如下所示:

class Base {
    virtual void do_sth(const std::vector<int>& v) = 0;
    void do_sth(int n) {
        do_sth(std::vector<int>{n});
    }
};

class Derived : public Base {
    void do_sth(const std::vector<int>& v) override {
          //do_sth with v
    }
};
或者说

using Base::do_sth 
在派生类中。 我不喜欢的是,我必须记住在每个类中编写重新定义/使用语句 源于基础的


有人知道另一种可能更好的方法来实现我所寻求的功能性吗?也许我应该选择另一个设计选项?

使你的
做某事
功能非虚拟,并有一个受保护的虚拟
做某事impl
功能来执行实际工作。是的!这完全解决了我的问题!另一种选择是使用不同的名称,例如:
virtualvoid add_number(const std::vector&v)=0
无效添加编号(整数n)
void Derived::do_sth(int n) {
    Base::do_sth(n);
}
using Base::do_sth