Частное наследование в программе EMPMULT — КиберПедия 

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Частное наследование в программе EMPMULT

2020-05-08 192
Частное наследование в программе EMPMULT 0.00 из 5.00 0 оценок
Заказать работу

Классы manager и scientist являются частными производными классов employee и student. В этом случае пет надобности использовать общее наследование, так как объекты классов manager и scientist не пользуются методами базовых классов employee и student. Однако класс laborer должен быть общим производным класса employee, поскольку он пользуется его методами.

 

Конструкторы при множественном наследовании

Программа EMPMULT не имеет конструкторов. Рассмотрим пример, показыва­ющий, как работают конструкторы при множественном наследовании.

Представим, что мы пишем программу для строителей-подрядчиков, которая работает со строительными материалами. Нам нужен класс, определяющий коли­чество стройматериалов каждого типа, например 100 восьмиметровых бревен. Другой класс должен хранить различные данные о каждом виде стройматериа­лов. Например, длину куска материала, количество таких кусков и стоимость за погонный метр.

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

Мы используем класс Distance из предыдущего примера для хранения длины материала. Наконец, мы создали класс Lumber который является производным классов Туре и Distance. Далее рассмотрим листинг программы ENGLMULT.

// englmult.cpp

// программа демонстации множественного наследования

#include <iostream>

#include <string>

using namespace std;

///////////////////////////////////////////////////////////

class Type // Тип древесины

{

private:

string dimensions;

string grade;

public:

// конструктор без параметров

Type (): dimensions ("N/A"), grade ("N/A")

{ }

// конструктор с двумя параметрами

Type (string di, string gr): dimensions (di), grade (gr)

{ }

void gettype () // запрос информации у пользователя

{

cout << " Введите номинальные размеры (2x4 и т.д.): ";

cin >> dimensions;

cout << " Введите сорт (необработанная, брус и т.д.): ";

cin >> grade;

}

void showtype () const // показ информации

{

cout << "\n Размеры: " << dimensions;

cout << "\n Сорт: " << grade;

}

};

///////////////////////////////////////////////////////////

class Distance // английские меры длины

{

private:

int feet;

float inches;

public:

// конструктор без параметров

Distance (): feet (0), inches (0.0) { }

// конструктор с двумя параметрами

Distance (int ft, float in): feet (ft), inches (in)

{ }

void getdist () // запрос информации у пользователя

{

cout << " Введите футы: ";

cin >> feet;

cout << " Введите дюймы: ";

cin >> inches;

}

void showdist () const // показ информации

{

cout << feet << "\'-" << inches << '\"';

}

};

///////////////////////////////////////////////////////////

class Lumber: public Type, public Distance

{

private:

int quantity; // количество

double price;    // цена за штуку

public:

// конструктор без параметров

Lumber (): Type (), Distance (), quantity (0), price (0.0) { }

// конструктор с шестью параметрами

Lumber (string di, string gr, // параметры дпя Type

int ft, float in, // параметры для Distance

int qu, float pre): // наши собственные параметры

Type (di,gr),   // вызов конструктора Type

Distance (ft, in), // вызов конструктора Distance

quantity (qu), price (pre) // вызов наших конструкторов

{ }

void getlumber () {

Type::gettype ();

Distance::getdist ();

cout << " Введите количество: ";

cin >> quantity;

cout << " Введите цену: ";

cin >> price;

}

void showlumber () const {

Type::showtype ();

cout << "\n Длина: ";

Distance::showdist ();

cout << "\n Стоимость " << quantity << " штук: " << (price * quantity) <<

"рублей"; }

};

///////////////////////////////////////////////////////////

int main ()

{

Lumber siding; // используем конструктор без параметров

cout << "\n Информация об обшивке:\n";

siding.getlumber (); // получаем данные от пользователя

// используем конструктор с шестью параметрами

Lumber studs ("2x4", "const", 8, 0.0, 200, 4.45F);

// показываем информацию

cout << "\nОбшивка";

siding.showlumber ();

cout << "\nБbpyc";    

studs.showlumber ();

cout << endl;

return 0;

}

Главной особенностью этой программы является использование конструкто­ров производного класса Lumber. Они вызывают подходящие конструкторы классов Туре и Distance.

 

Конструкторы без аргументов

В классе Туре конструктор без аргументов выглядит следующим образом: Туре ()

{ strcpy(dimensions. "N/A"): strcpyC grade. "N/A") }

Этот конструктор присваивает значениям полей dimensions и grade строку "N/A" (недоступно), поэтому при попытке вывести данные для объекта класса Lumber пользователь будет знать, что поля пусты.

Нам уже знаком конструктор без аргументов в классе Distance:

Distance (): feet (0). inches (0.0) { }

Конструктор без аргументов класса Lumber вызывает конструкторы обоих классов — Туре и Distance.

Lumber: Type (). Distance (). quantity (0). price (0.0) { }

Имена конструкторов базового класса указаны после двоеточия и разделены запятыми. При вызове конструктора класса Lumber начинают работу конструк­торы базовых классов Туре() и Distance(). При этом инициализируются перемен­ные quantity и price.

 


Поделиться с друзьями:

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

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



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.013 с.