8. Играем с компьютером. Более сложный примедр___________
где эти данные расположены. Для хранения адреса нужно обычно отдвух (16-разрядные компьютеры) до четырех (32-разрядные компьютеры) байтов. Но реализация работы с указателями была сделана в Си независимой от марки компьютера, то есть в этом языке можно работать с адресами ОЗУ, не задумываясь над тем, как все это происходит на физическом уровне. Поэтому программы на Си, сохраняя эффективность, сравнимую с эффективностью программ на ассемблере, стали машинно-независимыми — тексты на Си можно легко переносить на любые компьютеры, где имеется соответствующий компилятор.
Однако с ростом производительности ЭВМ и повышением их быстродействия сложность создаваемых программ стала стремительно увеличиваться. И сразу выявился недостаток указателей — из-за простоты их использования и полного отсутствия контроля за тем, на какую область памяти они указывают, при малейшей ошибке происходила порча посторонних (нередко системных) областей ОЗУ и серьезное нарушение работы и программы, и операционной системы. Возникла потребность в более мощном языке, который позволял бы быстро создавать крупные проекты и при этом обладал бы более высокой надежностью. Таким языком стал Си++. Поддержка указателей с целью совместимости с ранними версиями Си в нем сохранилась, однако появились и новые средства, более аккуратно работающие с памятью.
Кстати, в появившемся несколько лет назад языке Java, созданном на базе Си++, указатели вообще были ликвидированы.
Итак, подводя итоги нашего исторического экскурса, скажем, что сочетание «->» для доступа к свойствам объекта применяется, когда этот объект (точнее говоря, переменная соответствующего класса) является указателем. Символ «.» применяется, когда это обычная переменная (не указатель).
В примерах, приводимых в данной книге, указатели используются только по мере необходимости, и применять их во избежание трудноуловимых ошибок никогда не рекомендуется. Но в тех частях кода, которые были сгенерированы автоматически, по самым разным причинам большинство готовых объектов доступны только через указатели. Поэтому можно руководствоваться простым правилом:
при работе со стандартными или автоматически созданными объектами C++Builder (окна и расположенные на них визуальные компоненты), представленными указателями, для доступа к их свойствам и методам надо использовать знак «->», а при работе с переменными собственных классов — символ «.».
136