|
Программирование >> Программирование на языке c++
тем же именем f, то, в отличие от нашей функции f, глобальная функция будет видима везде. В заключение перечислим основные свойства и правила использования статической памяти: компоненты-данные и компоненты-функции класса можно объявить статическими (static); статические компоненты-данные будут одними и теми же для всех объектов одного класса. Фактически строится только одна копия статических данных, которая может быть использована всеми объектами соответствующего класса; статические компоненты не являются частью объектов класса; статические компоненты глобального (внешнего) класса имеют внешнюю компоновку; объявление статических компонентов-данных в классе не является описанием. Им необходимо присвоить значения где-то в другом месте; статические компоненты-функции не имеют указателя tiiis, поэтому они могут обращаться к нестатическим компонентам класса только с использованием операторов . или ->; статические компоненты-функции не могут быть виртуальными; нельзя объявить две функции, имеющие одинаковые имена и одинаковые типы аргументов, такие, что одна из них статическая, а другая нет; локальный класс не может иметь статических компонентов; если класс CL имеет статический компонент st, то к нему можно обращаться как к CL::st, т. е. независимо от объектов этого класса. Однако к нему можно обратиться и с использованием операторов . и ->, если заданы соответствующие объекты; статический компонент существует даже при отсутствии объектов соответствующего класса; статические компоненты глобального класса можно инициализировать так же, как и другие глобальные объекты и только в файле, где они объявлены; статические компоненты подчиняются обычным правилам доступа к ним из-за пределов класса за исключением того, что их можно инициализировать; тип статических компонентов не включает имя класса, в котором они объявлены. 3.11. Структуры и смеси Вместо ключевого слова class в языке С++ можно использовать ключевое слово struct. В этом случае структура тоже будет определять класс, объединяющий компоненты-данные и компоненты-функции, однако все компоненты структуры по умолчанию будут иметь атрибут public. Напомним, что все компоненты класса имеют атрибут private по умолчанию. Смесь - это структура, в которой каждый компонент размещается в памяти на одном и том же месте (правильнее сказать, каждый компонент смеси имеет один и тот же адрес в памяти). При этом предполагается, что в одно и то же время будет использован только один компонент смеси, в другое же время значение этого компонента безразлично и мы можем записать на его место в памяти значение другого компонента. Использование такого подхода позволяет экономить память. Рассмотрим примеры. Первый из них показывает объявление структур и различные способы передачи их в функции. #include <iostream.h> struct my struct { char *str; my struct(char *S) ; str(S) {} это конструктор void display str() { cout str << endl; } void f 1(my struct m s) передача структуры в функцию { m s.display str(); } void f2(my struct &m s) передача ссылки на структуру в функцию { m s.display str(); } my struct ms( via pointer ); void f3(my struct *ms) передача указателя на структуру в функцию { ms->display str(); } void main(void) { my struct m s( directly ); f1(m s); Результат: directly my struct rm s( as a reference ); f2(rm s); Результат: as a reference f3(&ms); Результат: via pointer Второй пример демонстрирует использование анонимных объединений (или смесей). Глобальные анонимные объединения должны быть статическими (объявляться со спецификатором static). #include <iostream.h> static union { это глобальное анонимное объединение (смесь) int а; float b; char с; }; void main(void) { union { это локальное анонимное объединение (смесь) int а; float b; char с; }; ::а = 10; а = 20; здесь а - локальная и ;:а - глобальная переменные cout ;:а \t а endl; Результат: 10 20 ::Ь = 123.456; b = 555.666; cout ::b \t b endl; Результат: 123.456 555.666 ::c = x; с = #; cout ::c \t с endl; Результат: x#
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |