why can a base pointer point to derived object only under public inheritance?

前端 未结 3 924
野性不改
野性不改 2021-01-05 03:03

I think its because the base class data members and methods wont be accessible , but I\'d like some more clarity on this. Also, is this the reason why polymorphism (using vi

3条回答
  •  -上瘾入骨i
    2021-01-05 03:34

    Here is an example which will help you to understand better

    class Base{
      public:
      int foo;
    };
    class Derived: private Base{
      public:
      int bar;
    };
    

    Now in this program lets see what the derived class object can do. The derived class object can

    • Access the integer variable bar publicly.
    • Access the integer variable foo privately (only inside the class Derived) because the relation of inheritance is private.

    Now lets see what happens if a Base pointer can do if it is made to point to such object. For the base class pointer,

    • The Base pointer can't access the variable bar because it only points to the base section of the derived class object.
    • And according to the base class pointer the variable foo is public, As it has been defined under the base class that it is public.

    So now you can see the ambiguity that the base pointer will face if it points to an object of a class inherited under private relation.

    Ambiguity: According to the derived class object foo is private, but the base pointer considers it to be public.

    So the morale of private or protected inheritance is lost if such things were allowed. I hope this clears your doubt.

提交回复
热议问题