Тот факт, что класс truck наследует класс road_vehicle, означает, что класс truck наследует все содержимое класса road_vehicle. К содержимому класса road_vehicle класс truck добавляет член данных cargo, а также функции-члены, необходимые для поддержки члена cargo.

Обратите внимание на то, как наследуется класс road_vehicle. Общий формат для обеспечения наследования имеет следующий вид.

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

{

 тело нового класса

}

Здесь элемент доступ необязателен. При необходимости он может быть выражен одним из спецификаторов доступа: public, private или protected. Подробнее об этих спецификаторах доступа вы узнаете ниже в этой главе. А пока в определениях всех наследуемых классов мы будем использовать спецификатор public. Это означает, что все public-члены базового класса также будут public-членами производного класса. Следовательно, в предыдущем примере члены класса truck имеют доступ к открытым функциям-членам класса road_vehicle, как будто они (эти функции) были объявлены в теле класса truck. Однако класс truck не имеет доступа к private-членам класса road_vehicle. Например, для класса truck закрыт доступ к члену данных wheels.

Рассмотрим программу, которая использует механизм наследования для создания двух подклассов класса road_vehicle: truck и automobile.

// Демонстрация наследования.

#include

using namespace std;

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

class road_vehicle {

  int wheels;

  int passengers;

 public:

  void set_wheels(int num) { wheels = num; }

  int get_wheels() { return wheels; }

  void set_pass(int num) { passengers = num; }

  int get_pass() { return passengers; }

};

// Определяем класс грузовиков.

class truck : public road_vehicle {

  int cargo;

 public:

  void set_cargo(int size) { cargo = size; }

  int get_cargo() { return cargo; }

  void show();

};

enum type {car, van, wagon};

// Определяем класс автомобилей.

class automobile : public road_vehicle {

  enum type car_type;

 public:

  void set_type(type t) { car_type = t; }

  enum type get_type() { return car_type; }

  void show();

};

void truck::show()

{

 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

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

Перейти на страницу:

Все книги серии Изучайте C++ с профессионалами

Похожие книги