ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 10) онлайн
Резюме
Мы весьма поверхностно прошлись в этой главе по теме указателей. Она очень обширна, и в разделах этой главы мы рассмотрели лишь основные понятия, на которых построены примеры нашей книги и которых достаточно для дальнейше- го изучения темы.
Мы узнали, что все объекты имеют адреса в памяти компьютера и что адре- са — это указатели константы. Адрес переменной можно получить, используя операцию получения адреса &.
Указатели — это переменные, значением которых является адрес. Указате- ли определяются с использованием звездочки, которая означает указатель на. В определение указателя всегда включают тип данных, на который он указыва- ет, так как компилятору необходимы сведения о том, на что будет указывать указатель и как правильно выполнять с ним арифметические действия. Доступ к тому, на что указывает указатель, мы получаем, применяя звездочку, которая в этом случае является операцией разыменования, то есть получения значения переменной, на которую указывает указатель.
Специальный тип void* означает указатель на любой тип данных. Он исполь- зуется в ситуациях, когда один и тот же указатель должен хранить адреса пере- менных разных типов.
Доступ к элементу массива можно получить, используя операции массива с квадратными скобками или указатели. Адрес массива является указателем-кон- стантой, но его можно присвоить переменной-указателю, которая может быть увеличена или изменена.
Функция при передаче ей адреса переменной может работать с самой пере- менной (этого не происходит, когда аргумент передается по значению). В этом отношении передача аргумента по указателю дает то же преимущество, что и передача по ссылке, хотя для доступа к аргументам указателя нужно применять операцию разыменования. Однако указатели в некоторых случаях предоставляют более гибкий механизм.
Строковая константа может быть определена как массив или с использова- нием указателя; последний подход более гибок. Строки, представленные масси- вами типа char, обычно передаются в функции с использованием указателей.
Операция new предназначена для выделения требуемого количества памяти в системе. Она возвращает указатель на выделенный участок памяти. Использу- ется для создания переменных и структур данных в течение исполнения про- граммы. Операция delete освобождает память, выделенную с использованием операции new.
Если указатель указывает на объект, то доступ к членам объекта можно по- лучить, используя операцию ->. Для доступа к членам структуры используется тот же синтаксис.
В классах и структурах могут содержаться элементы, которые являются ука- зателями на сами эти классы или структуры. Это позволяет создать более слож- ные структуры, такие, как связные списки.
Могут существовать указатели на указатели. Такие переменные определяют- ся с использованием двойной звездочки, например int** pptr.
Многообразие в диаграммах классов UML показывает количество объеди- ненных объектов.
Диаграммы состояний UML показывают, как изменяются с течением време- ни ситуации, в которых находится объект. Состояния показываются на диаграм- мах в виде прямоугольников со скругленными углами, а переходы между со- стояниями — в виде прямых линий.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
