Domanda

  

Eventuali duplicati:
   Perché questo non è consentito in C ++?

Perché questo non ammessi in 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;
}

sto ottenendo un errore

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

La mia domanda è che, poiché func () è definita classe derivata pubblico e la dichiarazione ((* Derivato) PTR) -> func (); sta cercando di visualizzare il func () di derivato .. Perché c'è un problema accessibile grazie alla modalità di inheritance..How fa modalità di trasmissione (privato) colpisce la chiamata anche se ho già func pubblica derivato () nella classe derivata ..?

Se la modalità di eredità viene modificato in pubblico ho il mio desiderato result..But un caso in cui func () è privata di base (in modo da func () della base non è ereditaria) e func () è pubblico in derivati e modalità di trasmissione è pubblico per questo ancora mi appare il mio desideravo result..Shouldn sarò ottenendo un errore di compilazione, come nel caso precedente ??

Sono totalmente confuso ..Please dimmi come il compilatore funziona in questo caso .. ??

È stato utile?

Soluzione

Non si può lasciare che il punto di puntatore base all'oggetto derivato quando c'è ereditarietà privata.

L'ereditarietà pubblica esprime un ISA rapporto. ereditarietà privata d'altra parte esprime una implementato in termini di rapporto

Ther errore di compilazione si riferisce alla linea: ptr = new derived;

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top