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