Question

  

Possible en double:    Pourquoi est-ce pas permis en C ++?

Pourquoi est-ce pas permis en C ++ ... ??

class base
{
  private:

  public:
      void func()
         {
              cout<<"base";
         }  


};

class derived : private base
{
  private:


  public:
            void func()
         {
              cout<<"derived";
              }


};

int main()
{
base * ptr;
ptr = new derived;
((derived *)ptr)->func();
return 0;
}

Je reçois une erreur

**61 C:\Dev-Cpp\My Projects\pointertest.cpp `base' is an inaccessible base of `derived'** 

Ma question est que, depuis func () est définie publique dans la classe dérivée et la déclaration ((Dérivé *) ptr) -> func (); tente d'afficher la func () dérivé .. Pourquoi est-il un problème accessible à cause du mode de inheritance..How fait le mode de transmission (privé) affecte l'appel même si je l'ai déjà publique dérivée func () dans la classe dérivée ..?

Si le mode de transmission est changé en public, je reçois mon choix result..But un cas où func () est privé dans la base (de façon func () de la base n'est pas héritée) et aussi func () est public en dérivé et le mode de transmission est publique pourquoi je reçois encore mon désiré result..Shouldn-je recevoir une erreur Compile comme dans le cas précédent ??

Je suis tout à fait confus ..Please me dire comment le compilateur fonctionne dans ce cas .. ??

Était-ce utile?

La solution

Vous ne pouvez pas laisser le point de pointeur de base à l'objet dérivé quand il y a l'héritage privé.

héritage public exprime un isa relation. héritage privé d'autre part exprime un mis en œuvre en termes de relation

Ther erreur de compilation se réfère à la ligne: ptr = new derived;

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top