Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 26
На сайте нет зарегистрированных пользователей

Пользователей: 13,368
новичок: Goosprin
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Игра Sokoban на Delphi + Блок схемы
Принадлежит ли точка пересечению двух окружностей на Turbo Pascal + Отче...
Диплом RSA, ЭЦП, сертификаты, шифрование на C#

Операция индексирования
Операция индексирования обязана возвращать ссылку, так как выражение имя [индекс] может стоять как справа, так и слева от знака присваивания:
TString t = "Привет от RR строки!"; t[12] = t[6];



Если выражение имя [индекс] стоит слева от знака присваивания, то изменяется текущий объект (так же, как и в операциях с присваиванием).
Кроме того, обычно реализуют два метода: константный и неконстантный. Неконстантный метод работает, когда выражение имя [индекс] стоит слева от знака присваивания. Константный метод вызывается, когда выражение имя [индекс] используется для доступа к символам константы-строки (объявленной явно или передаваемой как параметр по константной ссылке).
Наша операция, естественно, должна проверять правильность задания индекса. Так как тип индекса — byte, являющийся переопределенным типом unsigned char, то фактически надо проверять, не равен ли индекс 255, так как ни меньше нуля, ни больше 255 значение быть не может. Правда неясно, что делать, если заданный индекс все-таки равен 255. Наилучшим решением было бы прекратить выполнение операции и как-то сообщить об этом в вызывающую программу. Однако как и для конструкторов, это можно сделать только с помощью механизма обработки исключений — другим способом нам это сделать не удастся. Например, не получится возвращать код завершения, сигнализирующий об ошибке, так как операция должна возвращать ссылку, а не значение. Лишний параметр, в котором можно было бы передать код ошибки, мы тоже использовать не можем, поскольку никаких лишних параметров не допускается — операция индексирования является бинарной и должна иметь всего два аргумента. Один из них — текущий объект, второй — индексное выражение в квадратных скобках.
Поэтому до изучения механизма исключений придется реализовывать константный и неконстантный методы по-разному. Так как константный метод не изменяет содержимое полей класса, то в константном методе можно возвратить ссылку на последний нулевой элемент массива символов — это и будет служить признаком ошибки. В неконстантном методе так поступать нельзя: если операция применяется слева от знака присваивания, то, возвращая ссылку на завершающий элемент, мы разрешаем его изменять. Таким образом, мы можем «лишиться» завершающего нуля, и работа многих методов будет нарушена. Поэтому пока будем завершать этот метод аварийно.
ВНИМАНИЕ
Это — не лучшее решение. В профессиональном программировании аварийное завершение программы выполняется только в безвыходной ситуации. Мы пересмотрим это решение позднее после изучения механизма исключений.
Если вы достаточно долго работаете программистом и скопили некоторые деньги, тогда можно купить катер. Продажа катеров б у тут недорого.
С учетом этих соображений реализация выглядит так, как показано в листинге 4.9.
Листинг 4.9. Реализация операции индексирования
char& operator[](const byte &index)
{ if (index<255) return s[index]; // нормальная работа
else abort(); // аварийное завершение
}
const char& operator[](const byte &index) const
{ if (index<255) return s[index]; // правильный индекс
else return s[255]; // неправильный индекс



Функции-операции достаточнолросты, поэтому мы реализовали их как подставляемые непосредственно в классе.
Опубликовал Kest September 17 2013 14:32:46 · 0 Комментариев · 5360 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Info
CoolHints2k
LaserTank [Исходн...
Интерактивный инт...
Упорядоченный дин...
Billenium Effects...
IPAddresseEdit
Tetris 2002
Библия хакера 2. ...
Правила программи...
BSButton
Text effect
Bitmap [для кнопок]
DemoEdit [Исходни...
Animation Effect ...
С# для профессион...
C++ Builder: Книг...
3D Октаэдр
Популярные загрузки
PolyFlow

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97833
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14191
Borland Delphi ... 10291
Turbo Pascal fo... 7373
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
Адреса, локальные ...
Data segment too l...
Процедура итерацио...
Малая вирусная энц...
Простая программа ...
Задание индексов в...
Принцип суперпозиции
Получить доступ в ...
Использование авто...
За что гемблеры по...
9. На все участвую...
Облегчайте переход
Схема кодирования,...
Наслаждайтесь рабо...
Борьба с недопусти...
период, что застав...
Средства системы O...
Создание и конфигу...
Перечислимые свойства
Как взломать форум...
binary search: клю...
Jet casino
Разделение трафика...
tld и engineering,...
_.„, Сервер удален...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?