Latest web development tutorials

herança C ++

Programação orientada a objetos é o conceito mais importante é herdada. Herança nos permite definir uma classe para outra base de classe, o que torna a criação e manutenção de uma aplicação mais fácil. Para fazer isso, também atingiu a reutilização da funcionalidade de código e melhorar os resultados do tempo de execução.

Quando você cria uma classe, você não precisa re-escrever um novo membros de dados e funções de membro, basta especificar a nova classe herda um membro existente da classe pode ser. A classe existente é chamadade classe base, a nova classe é chamada de classe derivada.

A herança é umrepresentante do relacionamento. Por exemplo, o mamífero é um animal, um cão é um mamífero, por conseguinte, um cão é um animal, e assim por diante.

& Classe base da classe derivada

Uma classe podem ser derivados de mais do que uma classe, o que significa que ele pode herdar dados e funções de várias classes de base. Define uma classe derivada, usamos uma lista de classe derivada para especificar uma classe de base. lista de derivação de classe para classe um ou mais base chamada a seguinte forma:

class derived-class: access-specifier base-class

Em que o acesso modificador de acesso especificador épúblico, protegido ou um privado,da classe base é definida antes do nome de uma classe. Se não tiver acesso modificador de acesso especificador, o padrão é privado.

Suponha que você tenha umaformade classebase,retângulo suas classes derivadas, como segue:

#include <iostream>
 
using namespace std;

// 基类
class Shape 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
};

// 派生类
class Rectangle: public Shape
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
};

int main(void)
{
   Rectangle Rect;
 
   Rect.setWidth(5);
   Rect.setHeight(7);

   // 输出对象的面积
   cout << "Total area: " << Rect.getArea() << endl;

   return 0;
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

Total area: 35

controle de acesso e herança

classe derivada pode acessar a classe base para todos os membros não-privados. Então, se você quer ser um membro de uma série de funções de membro de classe de base do acesso classe derivada deve ser declarado na classe base é privado.

Podemos resumir os diferentes direitos de acesso de acordo com o tipo de acesso, como segue:

访问publicprotectedprivate
同一个类yesyesyes
派生类yesyesno
外部的类yesnono

A classe derivada herda todo o método da classe base, excepto nas seguintes circunstâncias:

  • construtor da classe base e destruidor e construtor de cópia.
  • operadores sobrecarregados da classe base.
  • Amigo da função de classe base.

Tipo de herança

Quando uma classe é derivada da classe base, a classe base pode ser herdada comopúblico, protegido ou tipos particulares.Através da explicação acima é herdada tipo de acesso modificador de acesso especificador para especificar.

Nós quase não usoprotegida ou herança privateé normalmente usado herançapúblico.Quando diferentes tipos de herança, siga as seguintes regras:

  • classe membrosprotegidos quando uma classe é derivada de uma classe base pública,membrospúblicosda classe base é derivado membrospúblicosde uma classe, os membrosprotegidosda classe base é a classe derivada,osmembrosprivadosde uma classe base não pode ser directamentederivada: herança pública (public)acesso, mas pode ser acessado chamandoosmembrospúblicoseprotegidosda classe base.
  • herança protegido (protegida): Quando uma classe derivada da classe de protecção base,os membrospúblicoseprotegidosda classe base vai se tornar membrosprotegidos declasse derivada.
  • herança private (privado): Quando uma classe é derivada de uma classe base membros privados,públicos eprotegidosda classe base serão membrosprivadosda classe derivada.

Herança múltipla

herança múltipla ou seja, uma subclasse pode ter mais de uma classe pai que herda as características de mais de uma classe pai.

classe C ++ pode herdar de mais de um membro da classe a seguinte sintaxe:

class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
{
<派生类类体>
};

Em que a herança de acesso modificador épúblico, protegido ou um privado,utilizado para decorar cada classe base, a classe base entre cada separados por uma vírgula, como mostrado acima. Agora vamos olhar para os exemplos a seguir:

#include <iostream>
 
using namespace std;

// 基类 Shape
class Shape 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
};

// 基类 PaintCost
class PaintCost 
{
   public:
      int getCost(int area)
      {
         return area * 70;
      }
};

// 派生类
class Rectangle: public Shape, public PaintCost
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
};

int main(void)
{
   Rectangle Rect;
   int area;
 
   Rect.setWidth(5);
   Rect.setHeight(7);

   area = Rect.getArea();
   
   // 输出对象的面积
   cout << "Total area: " << Rect.getArea() << endl;

   // 输出总花费
   cout << "Total paint cost: $" << Rect.getCost(area) << endl;

   return 0;
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

Total area: 35
Total paint cost: $2450