Resumindo acesso membro da classe governa em C ++

votos
0

Eu estou tentando compreender plenamente as regras de acesso de membro de classe definido em vários parágrafos do [class.access] seção do padrão C ++. Eles são bastante complexas, portanto, eu preciso de uma curta mas resumo preciso e exaustivo .

Eu escrevi este programa para testar a acessibilidade de membros protegidos em várias situações (desde as regras para membros protegidos são o mais difícil de obter):

#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;
}

Cheguei a esta conclusão:

  • membros públicos de uma classe são acessíveis a quaisquer entidades;
  • membros privados de uma classe são acessíveis apenas a membros e amigos da mesma classe;
  • membros protegidos de uma classe são acessíveis apenas a membros e amigos da classe, para membros e amigos de classes derivadas dessa classe se os membros protegidos são herdadas das classes derivadas ou classes base das classes derivadas, e aos membros da classes base dessa classe se os membros protegidas são estáticos .

É o meu resumo preciso e exaustivo?

Publicado 14/02/2020 em 00:02
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Se a sua pergunta é baseada em acesso, estas são as regras dentro c ++. Vou fazer um resumo básico abaixo, mas para a explicação exaustiva acesse aqui . Isto irá entrar em maiores detalhes sobre como cada funciona.

  • públicos - funções e variáveis são capazes de ser acessado na mesma classe, classe derivada e classe fora

  • protegido classe funções e variáveis são capazes de ser acessado na mesma classe, e derivados -

  • privadas - funções e variáveis são capazes de acessada no mesmo classe.

Quando se trata de herança você tem vários tipos, bem como:

  • público - público e membros protegidos são herdadas com o seu respectivo tipo de acesso
  • protegida - membros públicos são herdadas como protegido e membros protegidos irão manter o seu tipo de acesso.
  • privada - membros públicos e privados serão herdadas

Nota : As classes derivadas herda todos os métodos da classe base, com a seguinte exceção.

  • Construtores, destruidores e construtores de cópia da classe base

  • operadores sobrecarregados da classe base.

  • As funções friend da classe base.

Agora, como para o amigo especificador, esta é a partir da referência CPP aqui Aqui você terá exemplos e explicações detalhadas sobre como usá-lo.

Você também vai encontrar exemplos para um monte de informações sobre lá quando se trata da biblioteca padrão, você também será capaz de ver o que está vindo para o padrão no futuro e quais recursos seus apoios compilador.

Respondeu 14/02/2020 em 05:22
fonte usuário

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