Latest web development tutorials

наследование C ++

Объектно-ориентированное программирование является наиболее важным понятием наследуется. Наследование позволяет определить класс в другой класс основе, что делает создание и поддержание приложения проще. Для этого, также достиг повторного использования функциональных возможностей кода и улучшить результаты времени выполнения.

Когда вы создаете класс, вам не нужно переписывать новый элементы данных и функции-члены, просто указать новый класс наследует существующего члена класса может быть. Существующий класс называетсябазовым классом, новый класс называется производным классом.

Наследованиеявляется представителем отношений.Например, млекопитающее представляет собой животное, собака является млекопитающим, поэтому, собака это животное, и так далее.

И производный класс базовый класс

Класс может быть получен из более чем одного класса, что означает, что он может наследовать данные и функции от нескольких базовых классов. Определяет производный класс, мы используем полученный список классов, чтобы указать базовый класс. Класс список вывод к одному или нескольким базовым классом с именем следующей формы:

class derived-class: access-specifier base-class

В котором модификатор доступа доступа к спецификатор являетсяоткрытым, защищенный или частныйхарактер , базовый класс определен перед именем класса. Если нет модификатора доступа доступа к спецификатора, по умолчанию является частным.

Предположим , что у вас есть базовый классShape, Прямоугольникего производных классов, следующим образом :

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

Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:

Total area: 35

Контроль доступа и наследование

Производный класс может получить доступ к базовым классом для всех не-частных членов. Так что если вы хотите быть членом функций-членов базового класса, полученного доступа класса должен быть объявлен в базовом классе является частным.

Мы можем суммировать различные права доступа в соответствии с типом доступа, следующим образом:

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

Производный класс наследует все метод базового класса, за исключением следующих обстоятельств:

  • конструктор базового класса и деструктор и конструктор копирования.
  • перегруженные операторы базового класса.
  • Друг функции базового класса.

Тип наследования

Когда класс является производным от базового класса, базовый класс может наследоваться вобщественных местах, защищенные или частныетипы. С помощью приведенного выше объяснения наследуется тип модификатора доступа доступа к спецификатора указать.

Едва ли мы использоватьзащищенное или закрытоенаследование обычно используетсяоткрытоенаследование. Когда различные типы наследования, следуйте следующим правилам:

  • Открытое наследование (публичное): защищенныечлены , когда класс является производным отобщественногобазового класса,открытыечлены базового класса получаютпубличныечлены класса,защищенныечлены базового класса является производным классом,частныечлены базового класса не могут быть непосредственно производный класс доступ, но можно получить по телефонуоткрытыеизащищенныечлены базового класса.
  • Защищенное наследование (защищенный): Когда класс , производный от базового класса защиты,открытые изащищенныечлены базового класса станутзащищеннымичленами производного класса.
  • Частное наследование (частное): Когда класс является производным от базового класса частных,общественных изащищенныечлены базового класса будутчастныечленами производного класса.

Множественное наследование

Множественное наследование, то есть подкласс может иметь более чем один родительский класс, который наследует характеристики более чем одного родительского класса.

Класс C ++ может наследовать более одного класса члена следующий синтаксис:

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

В котором модификатор доступа наследования являетсяпубличным, защищенный или частныйхарактер , используется для украшения каждый базовый класс, базовый класс между отделенных друг от друга запятой, как показано выше. Теперь давайте посмотрим на следующие примеры:

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

Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:

Total area: 35
Total paint cost: $2450