Virtual inheritance and static inheritance - mixing in C++

前端 未结 6 669
误落风尘
误落风尘 2020-12-29 13:33

If you have something like this:

#include 

template class A
{
public:
    void func()
    {
        T::func();
    }
};

c         


        
6条回答
  •  再見小時候
    2020-12-29 14:26

    Seems you just had to add a little trace and usage to answer your own question...

    #include 
    
    template struct A { 
        void func() { 
            T::func(); 
        } 
    }; 
    
    struct B1 : A { 
        virtual void func() { 
            std::cout << "virtual void B1::func();\n";
        } 
    }; 
    
    struct B2 : A { 
        void func() { 
            std::cout << "void B2::func();\n";
        } 
    }; 
    
    struct C1 : B1 { }; 
    struct C2 : B2 { }; 
    
    struct C1a : B1 {
        virtual void func() {
            std::cout << "virtual void C1a::func();\n";
        }
    };
    
    struct C2a : B2 {
        virtual void func() {
            std::cout << "virtual void C2a::func();\n";
        }
    };
    
    int main()
    {
        C1 c1; 
        c1.func(); 
    
        C2 c2; 
        c2.func(); 
    
        B1* p_B1 = new C1a;
        p_B1->func();
    
        B2* p_B2 = new C2a;
        p_B2->func();
    }
    

    Output:

    virtual void B1::func();
    void B2::func();
    virtual void C1a::func();
    void B2::func();
    

    Conclusion: A does take on the virtual-ness of B's func.

提交回复
热议问题