Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Топ:
Марксистская теория происхождения государства: По мнению Маркса и Энгельса, в основе развития общества, происходящих в нем изменений лежит...
Установка замедленного коксования: Чем выше температура и ниже давление, тем место разрыва углеродной цепи всё больше смещается к её концу и значительно возрастает...
Теоретическая значимость работы: Описание теоретической значимости (ценности) результатов исследования должно присутствовать во введении...
Интересное:
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Инженерная защита территорий, зданий и сооружений от опасных геологических процессов: Изучение оползневых явлений, оценка устойчивости склонов и проектирование противооползневых сооружений — актуальнейшие задачи, стоящие перед отечественными...
Дисциплины:
2020-05-08 | 192 |
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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!