7.4.1. Передача данных через параметры и через глобальные объекты
7.4.1. Передача данных через параметры и через глобальные объекты
Различные функции программы могут общаться между собой с помощью двух механизмов. (Под словом “общаться” мы подразумеваем обмен данными.) В одном случае используются глобальные объекты, в другом – передача параметров и возврат значений.
Глобальный объект определен вне функции. Например:
int glob;
int main() {
// что угодно
}
Объект glob является глобальным. (В главе 8 рассмотрение глобальных объектов и глобальной области видимости будет продолжено.) Главное достоинство и одновременно один из наиболее заметных недостатков такого объекта – доступность из любого места программы, поэтому его обычно используют для общения между разными модулями. Обратная сторона медали такова:
* функции, использующие глобальные объекты, зависят от этих объектов и их типов. Использовать такую функцию в другом контексте затруднительно;
* при модификации такой программы повышается вероятность ошибок. Даже для внесения локальных изменений необходимо понимание всей программы в целом;
* если глобальный объект получает неверное значение, ошибку нужно искать по всей программе. Отсутствует локализация;
* используя глобальные объекты, труднее писать рекурсивные функции (Рекурсия возникает тогда, когда функция вызывает сама себя. Мы рассмотрим это в разделе 7.5.);
* если используются потоки (threads), то для синхронизации доступа к глобальным объектам требуется писать дополнительный код. Отсутствие синхронизации – одна из распространенных ошибок при использовании потоков. (Пример использования потоков при программировании на С++ см. в статье “Distributing Object Computing in C++” (Steve Vinoski and Doug Schmidt) в [LIPPMAN96b].)
Можно сделать вывод, что для передачи информации между функциями предпочтительнее пользоваться параметрами и возвращаемыми значениями.
Вероятность ошибок при таком подходе возрастает с увеличением списка. Считается, что восемь параметров – это приемлемый максимум. В качестве альтернативы длинному списку можно использовать в качестве параметра класс, массив или контейнер. Он способен содержать группу значений.
Аналогично программа может возвращать только одно значение. Если же логика требует нескольких, некоторые параметры объявляются ссылками, чтобы функция могла непосредственно модифицировать значения соответствующих фактических аргументов и использовать эти параметры для возврата дополнительных значений, либо некоторый класс или контейнер, содержащий группу значений, объявляется типом, возвращаемым функцией.
Упражнение 7.9
Каковы две формы инструкции return? Объясните, в каких случаях следует использовать первую, а в каких вторую форму.
Упражнение 7.10
Найдите в данной функции потенциальную ошибку времени выполнения:
vectorstring readText( ) {
vectorstring text;
string word;
while ( cin word ) {
text.push_back( word );
// ...
}
// ....
return text;
}
Упражнение 7.11
Каким способом вы вернули бы из функции несколько значений? Опишите достоинства и недостатки вашего подхода
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Сбор данных через NETGRAPH
Сбор данных через NETGRAPH Начиная с версии NETAMS–CURRENT build 2340 (03 марта 2005 г.) работает метод сбора статистики и фильтрация трафика через модуль NETGRAPH.Технология NETGRAPH доступна для операционной системы FreeBSD версий 4.хх и 5.хх. Входящий в поставку модуль совместим с веткой 5.хх. NETGRAPH
Сбор произвольных данных через ds_raw
Сбор произвольных данных через ds_raw Начиная с версии NeTAMS 3.4.0 (build 3018) появилась возможность учета произвольных данных с использованием сервисаservice data–source 3type rawКоманда:rawdata unit name XXX policy YYY in AAA out BBB {as–is|incremental} [time]Где XXX и YYY — имена юнита и политикиAAA и BBB — значения в байтах,
22.9 Конфигурирование через DHCPv6
22.9 Конфигурирование через DHCPv6 Система может получить полный набор конфигурационных параметров от сервера DHCP. Для перехода на DHCP версии 6 нужны некоторые изменения.Новый протокол DHCP должен поддерживать адреса версии 6. Кроме того, старый тайм-аут выделения адреса нужно
23.3.1 Автоконфигурация через маршрутизаторы
23.3.1 Автоконфигурация через маршрутизаторы Маршрутизаторы предоставляют хостам:? Адресную информацию маршрутизатора? Список всех префиксов, используемых связью? Префиксы, которые должны применять хосты для создания собственных адресов? Максимальный предел
2.2. Звонки через Интернет
2.2. Звонки через Интернет Популярной возможностью Интернета является услуга голосового общения, а также звонки через Интернет на мобильные и стационарные телефоны. Причем просто возможность голосового общения между двумя пользователями Интернета на данный момент
Подключение через модем
Подключение через модем Медленный модемный доступ сегодня, к счастью, исчез почти повсеместно, и пользоваться им мы будем лишь в самых крайних случаях. Самое забавное, что прежде всего это счастье светит владельцам именно ноутбука – иным способом подключить компьютер к
7.3.3. Некоторые полезные глобальные параметры
7.3.3. Некоторые полезные глобальные параметры В табл. 7.1 приведены некоторые полезные глобальные параметры программы GRUB.Таблица 7.1. Полезные глобальные параметры GRUB Параметр Описание hiddenmenu Скрывает загрузочное меню. Для его открытия нужно нажать ‹Esc›. Посла тайм-аута
1.1. Передача файлов через Интернет
1.1. Передача файлов через Интернет Дельфи имеет сильный набор средств для написания новых компонентов и для иллюстрации мы напишем кодирование с помощью uuencode/uudecode, xxencode/xxdecode и Base64. Мы напишем достаточно мощный компонент, который реализует данные алгоритмы. Новый
Глава 2 Передача файлов через Интернет
Глава 2 Передача файлов через Интернет Интернет был изобретен для того, чтобы люди свободно могли обмениваться информацией, поэтому передача файлов с одного компьютера на другой – это одно из главных предназначений Интернета. На сегодняшний день существует множество
8.2. Глобальные объекты и функции
8.2. Глобальные объекты и функции Объявление функции в глобальной области видимости вводит глобальную функцию, а объявление переменной – глобальный объект. Глобальный объект существует на протяжении всего времени выполнения программы. Время жизни глобального
Привилегии через роли
Привилегии через роли Процесс реализации ролей состоит из четырех шагов:1. Создание роли с использованием оператора CREATE ROLE.2. Назначение привилегий этой роли посредством GRANT привилегия то роль.3. Назначение роли пользователям посредством GRANT роль то пользователь.4. Задание
8.2. Подключаться через телефон или через модем?
8.2. Подключаться через телефон или через модем? Вы можете использовать для подключения к телефону как мобильный телефон, так и EDGE/3G-модем. Какой вариант выбрать? Тут нужно решить, что для вас важнее — экономия или удобство. Ведь сотовый телефон есть у каждого и можно
Лекция 18. Глобальные объекты и константы
Лекция 18. Глобальные объекты и константы Локальных знаний не достаточно - компонентам ПО необходима глобальная информация: разделяемые данные, общее окно для вывода ошибок, шлюз для подключения к базе данных или сети. В классическом подходе достаточно объявить такой
Разработка через тестирование (TDD)
Разработка через тестирование (TDD) Наконец-то! Разработка через тестирование для меня важнее, чем Scrum и XP вместе взятые. Можете отнять у меня дом, телевизор, собаку, но только попробуйте запретить использование TDD! Если вам не нравится TDD, тогда просто не подпускайте меня