Выбрать главу

{

 cout << "колес: " << get_wheels() << "\n";

 cout << "пассажиров: " << get_pass() << "\n";

 cout << "грузовместимость в кубических футах: " << cargo << "\n";

}

void automobile::show()

{

 cout << "колес: " << get_wheels() << "\n";

 cout << "пассажиров: " << get_pass() << "\n";

 cout << "тип: ";

 switch(get_type()) {

  case van: cout << "автофургон\n";

   break;

  case car: cout << "легковой\n";

   break;

  case wagon: cout << "фура\n";

 }

}

int main()

{

 truck t1, t2;

 automobile c;

 t1.set_wheels(18);

 t1.set_pass(2);

 t1.set_cargo(3200);

 t2.set_wheels(6);

 t2.set_pass(3);

 t2.set_cargo(1200);

 t1.show();

 cout << "\n";

 t2.show();

 cout << "\n";

 с.set_wheels(4);

 с.set_pass(6);

 с.set_type(van);

 с.show();

 return 0;

}

При выполнении эта программа генерирует такие результаты.

колес: 18

пассажиров: 2

грузовместимость в кубических футах: 3200

колес: 6

пассажиров: 3

грузовместимость в кубических футах: 1200

колес: 4

пассажиров: 6

тип: автофургон

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

И еще. Обратите внимание на то, что оба класса truck и automobile включают функцию-член show(), которая отображает информацию об объекте. Эта функция демонстрирует еще один аспект объектно-ориентированного программирования — полиморфизм. Поскольку каждая функция show() связана с собственным классом, компилятор может легко "понять", какую именно функцию нужно вызвать для данного объекта.

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

Управление доступом к членам базового класса

Если один класс наследует другой, члены базового класса становятся членами производного. Статус доступа членов базового класса в производном классе определяется спецификатором доступа, используемым для наследования базового класса. Спецификатор доступа базового класса выражается одним из ключевых слов: public, private или protected. Если спецификатор доступа не указан, то по умолчанию используется спецификатор private, если речь идет о наследовании типа class. Если же наследуется тип struct, то при отсутствии явно заданного спецификатора доступа по умолчанию используется спецификатор public. Рассмотрим рамификацию (разветвление) использования спецификаторов public или private. (Спецификатор protected описан в следующем разделе.)

Если базовый класс наследуется как public-класс, его public-члены становятся public-членами производного класса.

Если базовый класс наследуется как publie-класс, все его public-члены становятся public-членами производного класса. Во всех случаях private-члены базового класса остаются закрытыми в рамках этого класса и не доступны для членов производного. Например, в следующей программе public-члены класса base становятся public-членами класса derived. Следовательно, они будут доступны и для других частей программы.

#include <iostream>

using namespace std;