Одиночное наследование

Механизм наследования позволяет определять новые классы на основе уже имеющихся. Класс, на основе которого создается новый класс, называют базовым (родительским) классом, а новый – производным (наследником).

Непосредственным базовым классом называется такой класс, которой входит в список базовых классов при определении класса.

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

Существует одиночное и множественное наследование.

При одиночном наследовании базовым является один класс, а при множественном наследовании базовыми классами должны быть несколько классов.

Управление доступом производных классов

При наследовании важную роль играет статус доступа к компонентам класса.

  • private – закрытый (собственный) закрытые компоненты доступны только внутри того класса, где они определены;
  • public – общедоступные компоненты класса видимы из любой точки программы
  • protected – защищенные методы и элементы данных доступны внутри класса, в котором они определены, и во всех производных классах.

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

  • общедоступные компоненты всех объектов программы;
  • защищенные данные и методы объектов, являющиеся представителями базовых классов;
  • собственные (закрытые) компоненты объекта.

Синтаксис наследования

class имя_производного класса: cg имя_базового класса

{……….};

cg- спец. р. доступа: public

private

protected

  1. Если cg наследуемого класса является , то все открытые электронные базы остаются открытыми и в производном
  2. Если cg наследуемого базового класса – , то все открытые элементы базового класса в производном становятся открытыми, но тем не менее открытее электронные базы класса закрытые доступны для функций производного класса. В обоих случаях 1 и 2 все закрытые электронные бабы класса в производном классе остаются закрытыми и недоступными
  3. Спец-р эквивалентен спец-ру с единственным исключением – защищенные эл. базового класса доступны для эл. всех производственных классов этого базового класса. Вне базового класса или производных классов защищенные эл. недоступны.

Пример одиночного наследования(Решение задачи можно посмотреть, скачав файл "Задача-21"):

Базовый класс наследуется как закрытый. При этом открытый базовый класс становятся закрытыми, внутри производного класса они остаются доступными.

#include<iostream.h>
class B
{ int x;
 public:
   void setx (int n) {x=n;}
   void showx() {cout<<"x="<<x<<'\n';}
};
 class D: private B
{ int y;
 public:
  void setxy (int n, int m)
     {setx(n); y=m;}
  void showxy() {showx(); cout<<"y="<<y<<'\n';}
};
main()
{ D ob; int a, b;
  cout<<"Vvedite 2 chisla\n";
  cin>>a>>b;
  ob.setxy(a, b);
  ob.showxy();
  return 0;
}

 

В данном случае функция showx() и setx() доступны внутри производного класса. Это правильно, поскольку они являются закрытыми элементами класса.

Пример одиночного наследования (Решение задачи можно посмотреть, скачав файл "Задача-20"):

Защищенные элементы класса наследуются как открытые.

#include<iostream.h>
class B
 {protected:
    int a, b;      // и закрытые, но для производного доступа
  public:
    void setab (int n, int m)  {a=n; b=m;}
 };

class D : public B
 {int c;
  public:
    void setc (int n) {c=n;}
    void showabc()
      {cout<<"a="<<a<<" "<<b<<" "<<c<<'\n';}
 };

main()
 { D ob;
   int x, y, z;
   cout<<"Vvedite 3 chisla\n";
   cin>>x>>y>>z;
   ob.setab (x,y);
   ob.setc(z);
   ob.showabc() ;
   return 0;
 }

Спецификатор доступа protected может находится в любом месте объявления класса, хотя обычно его располагают после объявления закрытых элементов (задаваемых по умолчанию) и перед объявлением открытых элементов.

Переменные а и b класса В защищены и наследуются производным классом D как открытые, потому они доступны для использования функциями – элементами класса D. Вне двух этих классов они закрыты и недоступны.

 

Среда, 08.05.2024, 14:08
Приветствую Вас Гость