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