Latest web development tutorials

C ++ eredità

programmazione orientata agli oggetti è il concetto più importante è ereditato. L'ereditarietà consente di definire una classe all'altra basi di classe, che rende la creazione e il mantenimento di una più facile applicazione. Per fare ciò, anche raggiunto il riutilizzo di funzionalità codice e migliorare i risultati in tempo di esecuzione.

Quando si crea una classe, non è necessario riscrivere nuovi dati membro e funzioni membro, è sufficiente specificare la nuova classe eredita un membro esistente della classe può essere. La classe esistente è chiamatala classe base, la nuova classe sichiamaclasse derivata.

L'ereditarietà è un rappresentante della relazione.Ad esempio, il mammifero è un animale, un cane è un mammifero, di conseguenza, un cane è un animale, e così via.

E classe di base della classe derivata

Una classe può essere derivata da più di una classe, che significa che può ereditare dati e funzioni di molteplici classi base. Definisce una classe derivata, utilizziamo un elenco classe derivata per specificare una classe di base. Classe lista di derivazione in classe uno o più di base nominato il seguente modulo:

class derived-class: access-specifier base-class

In cui l'accesso modificatore di accesso-specificatore èpubblico, protetto o uno privato,della classe base è definita prima del nome di una classe. Se nessun accesso modificatore di accesso-specificatore, il valore predefinito è privato.

Supponiamo di avere unaforma diclasse dibase, unrettangolo sue classi derivate, come 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 il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

Total area: 35

controllo accessi ed eredità

classe derivata può accedere alla classe di base per tutti i membri non privati. Quindi, se si vuole essere un membro di una classe di base funzioni membro della classe derivata accesso dovrebbe essere dichiarato nella classe base è privata.

Possiamo riassumere i diritti di accesso diversi a seconda del tipo di accesso, come segue:

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

Una classe derivata eredita tutto il metodo della classe base, salvo nei seguenti casi:

  • Base costruttore di classe e distruttore e costruttore di copia.
  • operatori di overload della classe base.
  • Amico della funzione di classe di base.

Tipo di eredità

Quando una classe è derivata dalla classe base, la classe base può essere ereditata comepubblico, protetto o tipi private.Attraverso la spiegazione di cui sopra è il tipo di accesso modificatore di accesso-specificatore ereditato per specificare.

Abbiamo appena utilizzareProtected o eredità privataviene utilizzata di solito ereditàpubblico.Quando diversi tipi di eredità, seguire le seguenti regole:

  • Classe membriprotetti quando una classe è derivata da una classe base pubblica,i membripubblicidella classe base è derivata membripubblicidi una classe, i membriprotettidella classe base è la classe derivata,imembriprivatidi una classe di base non possono essere derivatidirettamente: l'ereditarietà pubblica (pubblico)l'accesso, ma si può accedere chiamandoimembripubblicieprotettidella classe base.
  • eredità protetta (protetto): Quando una classe derivata dalla classe di protezionedibase,i membripubblicieprotettidella classe base diventeranno membriprotetti dellaclasse derivata.
  • eredità privato (privato): Quando una classe è derivata da una classe base membri privati,pubblici eprotettidella classe base saranno membriprivatidella classe derivata.

L'ereditarietà multipla

L'ereditarietà multipla che è, una sottoclasse può avere più di una classe genitore che eredita le caratteristiche di più di una classe genitore.

Classe C ++ può ereditare da più di un membro della classe la seguente sintassi:

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

In cui l'eredità di accesso modificatore èpubblico, protetto o una privata,utilizzato per decorare ogni classe base, la classe base tra ogni separati da una virgola, come mostrato sopra. Ora esaminiamo i seguenti esempi:

#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 il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

Total area: 35
Total paint cost: $2450