|
Программирование >> Структурное программирование
double total 0.0; for (int i = 0; i < 12; total += sales [ i ]; return total; Печать суь1мы годовых продаж void Salesperson::printAnnualSales() { cout setprecision(2) << setiosflags (ios::fixed ios::showpoint) << endl << Сумма продаж за год: $ totalAnnualSales() endl; Рис. 6.7. Использование функции-утилиты (часть2 из 3) FIG6 7.CPP Демонстрация функции-утилиты Компиляция совместно с SALESP.CPP #include <iostream.h> tinclude salesp.h main () { Salesperson s; создание объекта s класса Salesperson double salesFigure; for (int i = 1; i <= 12; i++) { cout Введите объем продаж за месяц i : ; cin >> salesFigure; s.setSales(i, salesFigure); s.printAnnualSales(); return 0; Введите Введите Введите Введите Введите Введите Введите Введите Введите Введите Введите Введите обьем объем обьем обьем обьем обьем обьем обьем обьем обьем обьем обгьем продаж продаж продгик продаж продёик продаж продаж продаж продаж продгик продаж продаж sa мес51ч за месяц sa месяц за месяц за месяц за месяц за месяц за месяц за месяц за месяц за месяц за месяц 5314.76 4292.38 4589.83 5534.03 4376.34 5698.45 4439.22 5893.57 4909.67 5123.45 4024.97 5923.92 Сумма продаж за год: $60120.59 Рис. 6.7. Использование функции-утилиты (часть 3 из 3) 6.10. Инициализация объектов класса: конструкторы После создания объекта его элементы могут быть инициализированы с помощью функции конструктор. Конструктор - это функция-элемент класса с тем же именем, что и класс. Программист предусматривает конструктор, который затем автоматически вызывается при создании объекта (создании экземпляра класса). Данные-элементы класса не могут получать начальные значения в определении класса. Они либо должны получить эти значения в конструкторе класса, либо их значения можно установить позже, после создания объекта. Конструкторы не могут указывать типы возвращаемых значений или возвращать какие-то значения. Конструкторы можно перегружать, чтобы обеспечить множество начальных значений объектов класса. Типичная ошибка программирования 6.5 Попытка объявить тип возвращаемого значения для конаруктора или возвратить значение из конаруктора. Хороший стиль программирования 6.7 В соответствующих случаях (почти всегда) предусматривайте конаруктор для уверенности в том, что каждый объект получил соответавующие, имеющие смысл начальные значения. Хороший стиль программирования 6.8 Каждая функция-элемент (или дружеавенная функция), которая изменяет исходные данные-элементы, должна гарантировать, что данные остаются в не противоречащем друг другу согласованном соаоянии. Когда объявляется объект класса, между именем объекта и точкой с запятой можно в скобках указать список инициализации элементов. Эти начальные значения передаются в конструктор класса. Скоро мы увидим несколько примеров подобных вызовов конструкторов. 6.11. Использование конструкторов с аргументами по умолчанию Конструктор из timel.cpp (рис. 6.5) присваивает нулевые (т.е. соответствующие 12 часам по полуночи в военном формате времени) начальные значения переменным hour, minute и second. Конструктор может содержать значения аргументов по умолчанию. Программа на рис. 6.8 переопределяет функцию конструктор Time так, чтобы она включала нулевые значения аргументов по умолчанию для каждой переменной. Задание в конструкторе аргументов по умолчанию позволяет гарантировать, что объект будет находиться в непротиворечивом состоянии, даже если в вызове конструктора не указаны никакие значения. Созданный программистом конструктор, у которого все аргументы - аргументы по умолчанию (или который не требует никаких аргументов), называется конструктором с умолчанием, т.е. конструктором, который можно вызывать без указания каких-либо аргументов. TIME2.H Объявление класса Time. Функции-элементы определенны в TIME.СРР, предотвращение неоднократного включения заголовочного файла fifndef Т1МЕ2 Н #define TIME2 Н конструктор с умолчанием class Time { public: Time(int = 0, int = 0, int = 0); void setTime(int, int, int); void printMilitary0; void printStandard0; private: int tiour; int minute; int second; lendif Рис. 6.8. Использование конструктора с аргументами по умолчанию (часть 1 из 4) TIME2.CPP Определения функций-элементов класса Time tinclude <iostream.h> tinclude time2.h Функция конструктор для задания начальных значений закрытых данных. По умолчанию значения равны О (смотри определение класса). Time::Time(int hr, int min, int sec) { setTime(hr, min, sec); } Установка значений hour, minute и second. Неверные значения устанавливаются равными 0. void Time::setTime(int h, int m, int s) { hour = (h >= 0 && h < 24) ? h : 0; minute = (m >= 0 && m < 60) ? m : 0; second =(s>=0&&s<60) ?s:0; Отображение времени в военном формате: HH:MM:SS void Time:: printMilitary ( ) { cout (hour < 10 ? 0 : (minute < 10 ? 0 (second < 10 ? 0 ) hour : ) minute << ) second;} Отображение времени в стандартном формате: HH:MM:SS AM (или PM) void Time::printStandardО cout << ((hour ==011 hour == 12) ? 12 : hour %12) : (minute < 10 ? 0 : ) minute : (second < 10 ? 0 : ) second (hour < 12 ? AM : PM ); Рис. 6.8. Использование конструктора с аргументами по умолчанию (часть 2 из 4)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |