Latest web development tutorials

C ++ dziedziczenie

Programowanie obiektowe jest najważniejsza koncepcja jest dziedziczona. Dziedziczenie pozwala nam zdefiniować klasę na innej podstawie klasy, co sprawia, że ​​tworzenie i utrzymywanie aplikacji łatwiejsze. Aby to zrobić, również osiągnął ponowne wykorzystanie funkcjonalności kodu i poprawić wyniki w czasie wykonywania.

Po utworzeniu klasy, nie trzeba ponownie pisać nowe członków danych i funkcje składowe, wystarczy podać nowa klasa dziedziczy istniejącego członka klasy może być. Istniejąca klasa jest nazywanaklasą bazową, nowa klasa nazywana jest klasa pochodna.

Dziedziczeniejest przedstawicielem związku.Na przykład, jeżeli ssakiem jest zwierzę, pies, jest ssak, w związku z tym, pies jest zwierzę, i tak dalej.

I pochodne klasy bazowej klasy

Klasa może pochodzić z więcej niż jednego rodzaju, co oznacza, że ​​może dziedziczyć dane i funkcje z wielu klas bazowych. Definiuje klasę pochodną, ​​używamy listę klasa pochodna określić klasę bazową. Lista Wyprowadzenie klasy do klasy jeden lub więcej bazowej nazwie następującą postać:

class derived-class: access-specifier base-class

Której modyfikator dostępu access-specifier jestpubliczne, chronione czy prywatnyjeden, base-klasa jest zdefiniowana przed nazwą klasy. Jeśli żaden modyfikator dostępu access-specyfikacją, domyślnie jest prywatny.

Załóżmy, że maszKształtklasybazowej,prostokąt jej klas pochodnych, co następuje:

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

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

Total area: 35

Kontrola dostępu i dziedziczenie

Klasa pochodna może uzyskać dostęp do klasy bazowej dla wszystkich non-prywatnego członków. Więc jeśli chcesz być członkiem ciągu funkcji składowych klasy bazowej uzyskanego dostępu klasy powinny być zadeklarowane w klasie bazowej jest prywatny.

można podsumować różnych praw dostępu zgodnie z typem dostępu, jak następuje:

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

Klasa pochodna dziedziczy wszystkie metody klasy bazowej, z wyjątkiem następujących przypadków:

  • Konstruktor klasy bazowej i destruktor i skopiuj konstruktora.
  • przeciążone operatory klasie bazowej.
  • Przyjaciel funkcji klasy bazowej.

Rodzaj dziedziczenia

Kiedy klasa pochodzi od klasy bazowej, klasa bazowa może być dziedziczona jakopubliczne, chronione lub prywatnetypy. Poprzez powyższe wyjaśnienie jest dziedziczona rodzaj modyfikatora dostępu access-specyfikatorem określić.

Mamy prawie nie używachronione lub prywatnedziedziczenie jest zwykle używany dziedziczeniepubliczne.Jeżeli różne typy dziedziczenia, postępuj zgodnie z następującymi zasadami:

  • Klasa członkowiechronione, gdy klasa pochodzi od klasy bazowej publicznego,członkówpubliczneklasy bazowej pochodzi członkówpublicznychklasy,chronionychczłonkowie klasy bazowej jest klasapochodna, prywatneczłonkowie klasy bazowej nie można bezpośredniouzyskiwanych: dziedziczenie publicznego (public)dostępu, ale można uzyskaćpoprzezwywołaniepublicznychichronionychczłonków klasy bazowej.
  • Chronione dziedziczenie (chronione): Kiedy klasa pochodzi z ochronyklasybazowej,członkowiepubliczneichronioneklasy bazowej będziechronionych członkowieklasy pochodnej.
  • Prywatne dziedziczenie (prywatny): Kiedy klasa pochodzi od klasy bazowej prywatnych,publicznych ichronionychczłonkowie klasy podstawowej będąprywatneczłonkowie klasy pochodnej.

Wielokrotne dziedziczenie

Wielokrotne dziedziczenie to jest podklasą może mieć więcej niż jedną klasę nadrzędną, która dziedziczy właściwości więcej niż jednej klasy nadrzędnej.

Klasa C ++ może dziedziczyć z więcej niż jednego członka klasy następującą składnię:

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

Przy czym dziedziczenie modyfikator dostępu jestpubliczne, chronione czy prywatnyjeden, wykorzystywane do dekoracji każdej klasy podstawowej, klasy bazowej pomiędzy oddzielonych przecinkiem, jak pokazano powyżej. Teraz spójrzmy na poniższych przykładach:

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

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

Total area: 35
Total paint cost: $2450