Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.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++ 如果std::vector::clear()不是静态的,那么如何在没有实例的情况下调用它?_C++ - Fatal编程技术网

C++ 如果std::vector::clear()不是静态的,那么如何在没有实例的情况下调用它?

C++ 如果std::vector::clear()不是静态的,那么如何在没有实例的情况下调用它?,c++,C++,我正在阅读以下代码: 类方法clear如何调用std::vector::clear?vector的clear是一个方法,而不是静态函数。没有实例怎么能调用它?这里没有静态方法,没有对象也没有调用。您正在观看的课程是: class OptionList : public std::vector<Option>, public RCCopyable<thread_unsafe_refcount> OptionList源自std::vector: 因此,没有一个实例,它就不是

我正在阅读以下代码:


类方法clear如何调用std::vector::clear?vector的clear是一个方法,而不是静态函数。没有实例怎么能调用它?

这里没有静态方法,没有对象也没有调用。您正在观看的课程是:

class OptionList : public std::vector<Option>, public RCCopyable<thread_unsafe_refcount>
OptionList源自std::vector:

因此,没有一个实例,它就不是明确的;它调用父类上的clear函数。如果不指示std::vector::,它将调用派生类上的clear函数,从而导致无限递归


注意,clear在std::vector中并没有声明为virtual,OptionList从std::vector公开继承。这是一个值得怀疑的设计,因为它违背了Liskov替换原则:您不能在需要std::vector的地方使用OptionList,因为将调用错误的clear,这可能违反OptionList类的期望。

有一个实例,它是*This

clear是OptionList的成员,它继承std::vector。调用是限定的,因为否则它将是无限递归的

在这个上下文中std::vector引用*这个基类实例;
class OptionList : public std::vector<Option>, public RCCopyable<thread_unsafe_refcount>
std::vector<Option>::clear();
struct base {
    void some_method() {};
};
struct dervied : base {
    void some_method() {           // note: not virtual, hides base method
         base::some_method();      // calls method from base
    };
};
  class OptionList : public std::vector<Option>, public RCCopyable<thread_unsafe_refcount>