Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Топ:
Техника безопасности при работе на пароконвектомате: К обслуживанию пароконвектомата допускаются лица, прошедшие технический минимум по эксплуатации оборудования...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Интересное:
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Дисциплины:
2020-05-08 | 201 |
5.00
из
|
Заказать работу |
|
|
Классы 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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!