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>