Riassumendo accesso membro della classe governa in C ++

voti
0

Sto cercando di comprendere appieno le regole di accesso membro di classe definito in più paragrafi del [class.access] sezione dello standard C ++. Sono abbastanza complessa quindi ho bisogno di una breve ma sintesi accurata ed esauriente .

Ho scritto questo programma per testare l'accessibilità dei membri protetti in diverse situazioni (dal momento che le regole per i membri protette sono il più difficile da ottenere):

#include <iostream>

class B {
  protected:
    int i = 1;
    static int const I = 1;
};

class X: public B {
  protected:
    int j = 2;
    static int const J = 2;
  public:
    void f();
    friend void g();
};

class D: public X {
  protected:
    int k = 3;
    static int const K = 3;
};

void X::f() {
  B b;
  X x;
  D d;
  //std::cout << b.i;  // error: 'i' is a protected member of 'B'
  std::cout << b.I;
  std::cout << x.i;
  std::cout << x.I;
  std::cout << x.j;
  std::cout << x.J;
  std::cout << d.i;
  std::cout << d.I;
  std::cout << d.j;
  std::cout << d.J;
  //std::cout << d.k;  // error: 'k' is a protected member of 'D'
  //std::cout << d.K;  // error: 'K' is a protected member of 'D'
}

void g() {
  B b;
  X x;
  D d;
  //std::cout << b.i;  // error: 'i' is a protected member of 'B'
  //std::cout << b.I;  // error: 'I' is a protected member of 'B'
  std::cout << x.i;
  std::cout << x.I;
  std::cout << x.j;
  std::cout << x.J;
  std::cout << d.i;
  std::cout << d.I;
  std::cout << d.j;
  std::cout << d.J;
  //std::cout << d.k;  // error: 'k' is a protected member of 'D'
  //std::cout << d.K;  // error: 'K' is a protected member of 'D'
}

int main() {
  X x;
  x.f();
  g();
  return 0;
}

Sono venuto a questa conclusione:

  • membri pubblici di una classe sono accessibili a tutte le entità;
  • membri privati di una classe sono accessibili solo ai soci e agli amici di quella classe;
  • membri protetti di una classe sono accessibili solo ai soci e agli amici di quella classe, ai membri e agli amici di classi derivate di quella classe se i membri protetti sono ereditati dalle classi derivate o classi di base delle classi derivate, e ai membri delle classi base di quella classe se i membri protetti sono statici .

È la mia sintesi accurata ed esauriente?

È pubblicato 14/02/2020 alle 00:02
fonte dall'utente
In altre lingue...                            


1 risposte

voti
0

Se la tua domanda è basata su accesso, queste sono le regole all'interno di C ++. Farò una sintesi di base al di sotto, ma per la spiegazione esauriente vai qui . Questo andrà in maggiore dettaglio su come funziona ciascuna.

  • pubblici - funzioni e le variabili sono in grado di accedere nella stessa classe, classe derivata e la classe di fuori

  • protetti classe funzioni e le variabili sono in grado di accedere nella stessa classe, e derivati -

  • privati - funzioni e le variabili sono in grado di accedere in stessa classe.

Quando si tratta di eredità si dispone di più tipi come bene:

  • pubblico - pubblico e membri protetti sono ereditate con il loro rispettivo tipo di accesso
  • protette - membri pubblici sono ereditate come protetti e membri protetti manterranno il loro tipo di accesso.
  • privato - soci pubblici e privati saranno ereditate

Nota : Le classi derivate eredita tutti i metodi della classe di base con la seguente eccezione.

  • Costruttori, distruttori e costruttori di copia della classe base

  • gli operatori di overload della classe base.

  • Le funzioni friend della classe base.

Ora, come per l'amico specificatore, questo è da riferimento cpp qui Qui avrete esempi e spiegazioni dettagliate su come usarlo.

Troverete anche esempi per un sacco di informazioni in là quando si tratta di libreria standard, anche voi sarete in grado di vedere ciò che sta venendo alla norma in futuro e quali caratteristiche il proprio compilatore.

Risposto il 14/02/2020 a 05:22
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more