|
Программирование >> Структурное программирование
FIG6 11.CPP Демонстрация открытой функции-элемента, которая возвращает ссылку на закрытый элемент данных. Класс Time для этого примера укорочен. iinclude <iostream.h> iinclude time4.h main () { Time t; int shourRef = t.badSetHour(20); cout << Часы перед изменением: << hourRef << endl; hourRef = 30; неправильное изменен- ное значение cout << Часы после изменения: << t.getHourO << endl; ОПАСНОСТЬ: вызов функции, которая возвращает ссыпку, может быть использован как L-величина. t.badSetHour(12) = 74; cout << endl << endl ПЛОХАЯ ПРАКТИКА ПРОГРАММИРОВАНИЯ!!! endl badSetHour как L-величина, часы: t.getHourO << endl << << endl* return 0; } Часы перед изменением: 20 Часы после изменения: 30 *********************************** ПЛОХАЯ ПРАКТИКА ПРОГРАММИРОВАНИЯ!!! badSetHour как L-величина, часы: 74 *********************************** Рис. 6.11. Возвращение ссылки на закрытый элементу данных (часть 3 из 3) 6.16. Присваивание побитовым копированием по умолчанию Для присваивания объекта другому объекту того же типа используется операция присваивания (=). Такое присваивание обычно выполняется с помощью побитового копирования: каждый элемент объекта копируется индивидуально в такой же элемент другого объекта (смотри рис. 6.12). (Замечание: побитовое копирование может вызвать серьезные проблемы, когда применяется к классу, чьи данные-элементы используют динамическое распределение памяти; в главе 8 Перегрузка операций мы обсудим эти проблемы и покажем, как их решать.) Объекты могут передаваться как аргументы функций и могут возвращаться из функций. Такие передача и возвращение выполняются по умолчанию вызовом по значению, т.е. передается или возвращается копия объекта (мы представим несколько примеров в главе 8 Перегрузка операций ). FIG6 12.CPP Демонстрация присваивания одного объекта другому с использованием побитового копирования по умолчанию #include <iostream.h> Простой класс Date class Date { public: Date (int = 1, int = 1, int = 1990); void print(); private: int month; int day; int year; конструктор с умолчанием Простой конструктор Date без проверки диапазонов Date::Date(int m, int d, int y) month = m; day = d; year = y; Печать Date в форме mm-dd-yyyy void Date::print () { cout month - day - year; main ( ) { Date datel(7, 4, 1993), date2; d2 no умолчанию равен 1/1/90 cout datel = ; datel.print(); cout << endl << date2 = ; date2.print{); date2 = datel; присваивание побитовым копированием по умолчанию cout << endl endl << После побитового копирования по умолчанию date2 = ; date2-print(); cout << endl; return 0; } datel = 7-4-1993 date2 = 1-1-1990 После побитового копирования по умолчанию date2 = 7-4-1993 6.12. Присваивание одного объекта другому с использованием побитового копирования по умолчанию 6.17. Повторное использование программного обеспечения Те, кто пишет объектно-ориентированные программ, концентрируют внимание на реализации полезных классов. Существуют огромные возможности сбора и каталогизации классов для обеспечения возможности доступа к ним значительной части сообщества программистов. Многие библиотеки классов уже существуют, другие повсеместно разрабатываются. Существуют попытки сделать эти библиотеки широкодоступными с целью конструирования программного обеспечения из существующих, хорошо определенных, тщательно проверенных, хорошо документированных, компактных, широко доступных компонентов. Этот способ повторного использования программ может ускорить разработку мощного, высококачественного программного обеспечения. Становится возможной ускоренная разработка приложений (rapid applications development - RAD). Однако, для полной реализации потенциала повторного использования программного обеспечения нужно решить ряд важных проблем. Необходимы способы каталогизации, лицензирования, механизмы защиты от искажений авторских копий классов, способы паспортизации, помогающие разработчикам новых систем определить, существуют ли необходимые им объекты, механизмы поиска для определения того, какие из классов доступны и насколько они соответствуют требованиям разработчика программного обеспечения, и тому подобное. Необходимо провести множество интересных исследований и решить множество проблем разработки. Поскольку потенциальное значение решения этих проблем огромно, они будут решены. 6.18. Размышления об объектах: программирование классов для моделирования лифта в разделах Размышления об объектах глав с 1 по 5 мы познакомились с основами объектного ориентирования и провели объектно-ориентированное проектирование модели лифта. В рамках главы 6 мы познакомились с деталями программирования и использования классов на языке С-Н-. К настоящему моменту вы готовы (и, возможно, страстно желаете) начать программирование вашей модели лифта. Совет по повышению эффективности 6.4 Передача объекта вызовом по значению хороша с точки зрения безопасности, по скольку вызываемая функция не имеет доступа к исходному объекту, но вызов по значению может ухудшить производительноаь в случае создания копии большого объекта. Объект может быть передан вызовом по ссылке путем передачи либо указателя, либо ссылки на объект. Вызов по ссылке способавует хорошей произ водительности, но с точки зрения безопасноаи хуже предыдущего, поскольку функ ции предоаавлен доауп к исходному объекту. Безопасной альтернативой является вызов со ссылкой const.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |