Default inheritance access specifier

前端 未结 9 1701
北海茫月
北海茫月 2020-12-04 19:12

If I have for example two classes A and B, such that class B inherits A as follows:

class B: public A

9条回答
  •  北海茫月
    2020-12-04 19:23

    AS other casting problem you have

    class A { virtual void test() = 0; };
    class B : virtual public A { virtual void testb() {} };
    class C : virtual public A { virtual void testc() {} };
    class D : public B, public C {
     virtual void test() override {}
    }
    
    void main() {
       D d;
       void* v = &d;
       A* a = &d;
    
       ((D*)A)->test(); //OK
       ((D*)v)->test(); //undefined behavior (that call testb() in vtable logic at 1st inheritance position)
       dynamic_cast(v)->test(); //compile error cast from void* not permitted
    
       //resolution
       void* x = a;
       ((D*)x)->test(); //OK but as you can see, you must to store a* in x*
    
    }
    

提交回复
热议问题