Virtual function inheritance

后端 未结 3 2209
忘掉有多难
忘掉有多难 2021-02-20 00:20

I have a confusion about the inheriting the virtual property of a method.

Let\'s suppose we have 4 classes: class A, class B, class C and class D. The classes are inheri

相关标签:
3条回答
  • 2021-02-20 00:34

    You're correct.

    I think that in this case the best solution is to try:

    #include <iostream>
    
    using namespace std;
    
    class A {
       public:
          void print(){ cout << "print A" << endl; };
    };
    
    class B: public A {
        public:
           virtual void print(){ cout << "print B" << endl; };
    };
    
    class C: public B {
         public:
            void print(){ cout << "print C" << endl; };
    };
    
    int main()
    {
       A *a = new C();
       B *b = new C();
    
       a->print(); // will print 'print A'
       b->print(); // will print 'print C'
    
       return 1;
    }
    
    0 讨论(0)
  • 2021-02-20 00:38

    Of course you can do it. Virtual method is optional to override so it doesn't matter that you declare it in class A or B. If you dont want to use that method in class A then simply declare in in class B.

    0 讨论(0)
  • 2021-02-20 00:46

    You are entirely correct. Child inherits what its ancestors have. Base classes can't inherit what the child has (such as a new function or variable). Virtual functions are simply functions that can be overridden by the child class if the that child class changes the implementation of the virtual function so that the base virtual function isn't called.

    A is the base class for B,C,D. B is a the base class for C, D. and C is the base class for D too.

    0 讨论(0)
提交回复
热议问题