Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Топ:
Теоретическая значимость работы: Описание теоретической значимости (ценности) результатов исследования должно присутствовать во введении...
Марксистская теория происхождения государства: По мнению Маркса и Энгельса, в основе развития общества, происходящих в нем изменений лежит...
Интересное:
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Дисциплины:
2020-05-08 | 200 |
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.
История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!