Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Топ:
Выпускная квалификационная работа: Основная часть ВКР, как правило, состоит из двух-трех глав, каждая из которых, в свою очередь...
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Установка замедленного коксования: Чем выше температура и ниже давление, тем место разрыва углеродной цепи всё больше смещается к её концу и значительно возрастает...
Интересное:
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
В следующей нашей программе мы внесем улучшения в пример ENGL0BJ, а также продемонстрируем несколько новых аспектов создания классов: перегрузку конструкторов, определение методов класса вне класса и, возможно, самое важное — использование объектов в качестве аргументов функций. Рассмотрим программу ENGLC0N:
// englcon.cpp
// constructors.adds objects using member function
#include <iostream>
using namespace std;
//////////////////////////////////////////////////////////
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 << "\ n Введите число футов: ";
cin >> feet;
cout << "Введите число дюймов: ";
cin >> inches;
}
void showdist () // вывод длины на экран
{ cout << feet << "\'-" << inches << "'\'"; }
void add_dist(Distance, Distance); // прототип
};
// --
// сложение длин d2 и d3
void Distance::add_dist(Distance d2, Distance d3) {
inches = d2.inches + d3.inches; // сложение дюймов
feet =0; //с возможным заемом
if (inches >= 12.0) // если число дюймов больше 12.0.
{ //то уменьшаем число дюймов
inches -= 12.0; // на 12.0 и увеличиваем
feet ++; // число футов на 1
}
feet += d 2. feet + d 3. feet; // сложение футов
}
//////////////////////////////////////////////////////////
int main()
{
Distance dist1, dist3; // две длины
Distance dist2(11, 6.25); // определение и инициализация
dist1.getdist(); // ввод distl
dist3.add_dist(dist1,dist2); // dist3 = dist1 + dist2;
// вывод всех длин
cout << "\ ndistl = ";
dist1.showdist();
cout << "\ndist2 = ";
dist2.showdist();
cout << "\ndist3 = ";
dist3.showdist();
cout << endl;
return 0;
}
Основной блок этой программы начинается с присвоения начальных значений полям объекта dist2 класса Distance, после чего производится его сложение с экземпляром distl, инициализируемым пользователем. Затем на экран выводятся все три экземпляра класса Distance:
Введите число футов: 17
Введите число дюймов: 5.75
distl = 17'-5.75"
dist2 = 11’-6.25"
dist3 = 29'-0"
Рассмотрим теперь, как выполняются новые действия, включенные в программу.
Перегруженные конструкторы
Было бы удобно производить инициализацию переменных класса Distance в момент их создания, то есть использовать объявления типа
Distance width(5, 6.25):
где определяется объект width, сразу же инициализируемый значениями 5 и 6.25 для футов и дюймов соответственно.
Чтобы сделать это, вызовем конструктор следующим образом:
Distance(int ft, float in): feet(ft). inches(in)
{ }
Мы инициализируем поля feet и inches теми значениями, которые передаются конструктору в качестве аргументов.
Тем не менее, мы хотим сохранить возможность определять переменные класса Distance без инициализации, подобно тому, как мы делали в программе ENGL0BJ.
Distance distl. dist2:
В программе ENGL0BJ не было конструктора, но определения работали без ошибок. Почему же они работали без конструктора? Это объясняется тем, что компилятор автоматически встраивает в программу конструктор без параметров, который и создает переменные класса, несмотря на то, что явного определения конструктора мы не делали. Такой конструктор без параметров называется конструктором по умолчанию. Если бы конструктор по умолчанию не создавался автоматически, то мы не смогли бы определять переменные классов, в которых отсутствует конструктор.
Зачастую нам хотелось бы, чтобы начальные значения полям объекта присваивались также и в конструкторе без параметров. Если возложить эту функцию на конструктор по умолчанию, то мы не сможем узнать, какими значениями были инициализированы поля. Если же для нас важно, какими значениями будут инициализироваться поля объекта класса, то нам следует явно определить конструктор. В программе ENGLC0N мы поступаем подобным образом:
Distance(): feet(0). inches(0.0) //конструктор по умолчанию
{ } //тело функции пусто, никаких действий не производится
Члены класса инициализируются константными значениями, в данном случае целым значением 0 для переменной feet и вещественным значением 0.0 для переменной inches. Значит, мы можем использовать объекты, инициализируемые с помощью конструктора без параметров, будучи уверенными в том, что поля объекта имеют нулевые, а не другие, случайные, значения.
Теперь у нас имеется два явно определенных конструктора с одним и тем же именем Distance(), и поэтому говорят, что конструктор является перегруженным. Какой из этих двух конструкторов исполняется во время создания нового объекта, зависит от того, сколько аргументов используется при вызове:
Distance length: //вызывает первый конструктор
Distance width(11, 6.0): //вызывает второй конструктор
|
|
|
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!