Is it recommended to explicitly make overriding functions virtual?

后端 未结 3 1287
面向向阳花
面向向阳花 2021-01-18 07:46

In times before C++11 when a virtual function was overriden in a derived class, it was recommended to add the virtual keyword also to the derived class function to make the

3条回答
  •  春和景丽
    2021-01-18 08:21

    as reported in the documentation for the override keyword, its meaning is that the function at hand MUST override a virtual function:

    In a method declaration, override specifies that the function must be overriding a base class method.

    It is a mean for enforcing (i.e. making the compiler enforce) such requirement. Of course, if the base class' function is not virtual, the code won't compile. Hence, as you pointed out, adding virtual is redundant.

    I would argue that it was not good advice to add it before c++11 either. Consider this snippet of code:

    #include 
    
    using namespace std;
    
    class A{
        public:
        void f(){
            cout << "A" << endl;
        }
    };
    
    class B : public A{
        public:
        virtual void f(){
            cout << "B" << endl;
        };
    };
    
    class C : public B{
        public:
        void f(){
            cout << "C" << endl;
        };
    };
    
    int main( int argc, char* argv[] ) 
    {
        C c;
        A& aref = c;
        aref.f();
        B& bref = c;
        bref.f();
    }
    

    whose output is, clearly, "A" followed by "C". As you see, adding virtual in class C would have no effect at all, while the virtual in class B plays a key role. Adering to the convention of adding virtual to class C would make this harder to see at a glance.

提交回复
热议问题