English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ Tutorial Básico

C++ Palavra-chave e identificador

C++ Instrução goto

C++ Retorno de referência

C++ String

C++ Enumerador (enum)

C++ Sobrecarga de operador

C++ Herança

C++ Template

C++ Map (container)

C++ <cmath>

controle de acesso de herança (public, protected, private) ++No presente artigo, você aprenderá a usar no C

Você pode declarar uma classe derivada a partir de uma classe base com diferentes especificações de acesso.classe,ou seja, públicoHerança,herança protegida ou herança privada.

#include <iostream>
using namespace std;
class base
{
.... ... ....
};
class derived : access_specifier base
{
.... ... ....
};

Atenção:Pode-se usar as palavras-chave public, protected ou private em vez do access_specifier usado no código acima.Anotação de acesso)termo.

Controle de acesso e herança

A classe derivada pode acessar todos os membros não privados da classe base. Portanto, se os membros da classe base não quiserem ser acessados pelos membros da classe derivada, eles devem ser declarados como private na classe base.

Podemos resumir diferentes tipos de acesso com base no nível de permissão de acesso, conforme mostrado a seguir:

acessopublicprotectedprivate
mesma classesimsimsim
Classe derivadasimsimnão
classe externasimnãonão

Uma subclasse herda todos os métodos da classe base, mas há exceções:

  • construtores, destrutores e cópia construtores da classe base.

  • operadores sobrecarregados da classe base.

  • funções amigas da classe base.

tipo de herança

quando uma classe derivada public, protected ou private alguns tipos. O tipo de herança é determinado pelo modificador de acesso access-specifier para especificar.

nós quase nunca usamos protected ou private herança, geralmente usada public Herança. Quando usar diferentes tipos de herança, siga as seguintes regras:

  • Herança pública (public):quando uma classe derivadapúblicoclasse base, apúblicomembros também sãopúblicomembros, osprotegidomembros também sãoprotegidomembros, osPrivadomembros não podem ser acessados diretamente pela subclasse, mas podem ser acessados por meio de chamadas de métodos da classe base.públicoeprotegidomembros podem ser acessados por meio de chamadas de métodos da classe base.

  • Herança protegida (protected): quando uma classe derivadaprotegidoclasse base, apúblicoeprotegidomembros tornar-se-ãoprotegidomembros.

  • Herança privada (private):quando uma classe derivadaPrivadoclasse base, apúblicoeprotegidomembros tornar-se-ãoPrivadomembros.

Herança múltipla

Herança múltipla é quando uma subclasse pode ter várias classes pai, herdando as características de várias classes pai.

C++ A classe pode herdar membros de várias classes, a sintaxe é a seguinte:

class <nome da classe derivada>:<modo de herança1><nome da classe base1>,<modo de herança2><nome da classe base2>,…
{
<corpo da classe derivada>
};

onde o modo de herança de acessibilidade é public, protected ou private um dos quais, usado para modificar cada classe base, as classes base são separadas por vírgula, como acima所示。Agora vamos ver o exemplo a seguir:

#include <iostream>
 
using namespace std;
 
// Classe base Forma
class Forma 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
};
 
// Classe base CustoPintura
class CustoPintura 
{
   public:
      int getCost(int área)
      {
         return área * 70;
      }
};
 
// Classe derivada
class Retângulo: public Forma, public CustoPintura
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
};
 
int main(void)
{
   Retângulo Ret;
   int área;
 
   Rect.setWidth(5);
   Rect.setHeight(7);
 
   area = Rect.getArea();
   
   // Saída da área do objeto
   cout << "Área Total: " << Rect.getArea() << endl;
 
   // Saída do custo total
   cout << "Custo Total: $" << Rect.getCost(area) << endl;
 
   return 0;
}

Quando o código acima for compilado e executado, ele produzirá o seguinte resultado:

Área Total: 35
Custo Total: $2450