Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 35
Текст из файла (страница 35)
Для доступа 172 Часть (. Язык С№ к скрытой переменной экземпляра и служит ключевое слово с)таз. Например, приведенный ниже код является правильным с точки зрения синтаксиса С№ способом написания конструктора Несс () . рпЫ№с несс(кпс иЫсь, апс неадьс) ( сььз.изось = итосьт свае.не'цпс = нетайне; ) В этом варианте написания конструктора кеес() имена параметров совпадают с именами переменных экземпляра, а следовательно, скрывают их. Но для "обнаружения" скрытых переменных служит ключевое слово с(т1э.
ГЛАВА Массивы и строки в этой главе речь вновь пойдет о типах данных языка С№. В ней рассматриваются массивы и тип зсгГпо, а также оператор цикла гогеасП. Массивы Массив представляет собой совокупность переменных одного типа с общим для обращения к ним именем. В языке С№ массивы могут быть как одномерными, так и многомерными, хотя чаще всего применяются одномерные массивы. Массивы служат самым разным целям, поскольку они предоставляют удобные средства объединения связанных вместе переменных. Например, в массиве можно хранить максимальные суточные температуры, зарегистрированные в течение месяца, перечень биржевых курсов или же названия книг по программированию из домашней библиотеки.
Главное преимущество массива — в организации данных таким образом, чтобы ими было проще манипулировать. Так, если имеется массив, содержащий дивиденды, выплачиваемые по избранной группе акций, то, организовав циклическое обращение к элементам этого массива, можно без особого труда рассчитать средний доход от этих акций. Кроме того, массивы позволяют организовать данные таким образом, чтобы легко отсортировать их.
Массивами в С№ можно пользоваться практически так же, как и в других языках программирования. Тем не менее у них имеется одна особенностге они реализованы в виде объектов. Именно поэтому их рассмотрение было отложено до тех пор, пока в этой книге не были представлены объекты. Реализация массивов в виде объектов дает ряд существенных преимуществ, и далеко не самым последним среди них является возможность утилизировать неиспользуемые массивы средствам "сборки мусора". Одномерные массивы Одномерный массив представляет собой список связанных переменных. Такие списки часто применяются в программировании. Например, в одномерном массиве можно хранить учетные номера активных пользователей сети или текущие средние уровни достижений бейсбольной команды.
174 Часть (. Язык С№ Для того чтобы воспользоваться массивом в программе, требуется двухэтапная процедура, поскольку в С№ массивы реализованы в виде объектов. Во-первых, необходимо объявить переменную, которая может обращаться к массиву. И во-вторых, нужно создать экземпляр массива, используя оператор пен. Так, для объявления одномерного массива обычно применяется следующая общая форма: тип[) имя массива = печ тип[размер]; где тип объявляет конкретный тип элемента массива.
Тип элемента определяет тип данных каждого элемента, составляющего массив. Обратите внимание на квадратные скобки, которые сопровождают тип. Они указывают на то, что объявляется одномерный массив. А раэмер определяет число элементов массива. На заметку! Если у вас имеется некоторый опыт программирования на С или С++, обратите особое внимание на то, как объявляются массивы е С№. В частности, квадратные скобки следуют после названия типа, а не имени массива.
Обратимся к конкретному примеру. В приведенной ниже строке кода создается массив типа 1пс, который составляется из десяти элементов и связывается с переменной ссьики на массив, именуемой яавр1е. 1пк[] яавр1е = пен 1пк[10) В переменной яавр1е хранится ссылка на область памяти, выделяемой для массива оператором пен. Эта область памяти должна быть достаточно большой, чтобы в ней могли храниться десять элементов массива типа 1пю Как и при создании экземпляра класса, приведенное выше объявление массива можно разделить на два отдельных оператора.
Например: 1пг[) яввр1е; яевр1е = печ 100[10] В данном случае переменная яавр1е не ссылается на какой-то определенный физический объект, когда она создается в первом операторе. И лишь после выполнения второго оператора эта переменная ссылается на массив.
Доступ к отдельному элементу массива осуществляется по индексу. Индекс обозначает положение элемента в массиве. В языке С№ индекс первого элемента всех массивов оказывается нулевым. В частности, массив яавр1е состоит из [О элементов с индексами от 0 до 9. Для индексирования массива достаточно указать номер требуемого элемента в квадратных скобках. Так, первый элемент массива яавр1е обозначается как яавр1е [О], а последний его элемент — как яавр1е [9].
Ниже приведен пример программы, в которой заполняются все [О элементов массива яавр1е. у/ Продемонстрировать одномерння массив. оввай Зуякевг с1аяв Лггаувево ( якатъс чо10 Ма1п () ьпе[] яавр1е = пен гпк[10]; 1пк 1; Гос(1 = 0; 1 < 10) 1 = 1+1) яввр1е[1] = 3.; Глава 7, Массивы и строки 175 ток(1 = ОР 1 < 10' 1 1+1) Сопзо1е.иг1се11пе("завр1е(" + 1. и "]: завр1е(1]); ) ) При выполнении этой программы получается следующий результат: завр1е[0): 0 завр1е[1): '1 завр1е[2): 2 яавр1е[3]: 3 завр1е[4]: 4 завр1е[5]: 5 яавр1е[б): б завр1е[7]: 7 яавр1е[8): 8 завр1е[9]: 9 Схематически массив завр1е можно представить таким образом: 0 1 2 3 4 5 6 7 8 9 1 ! в. е Я в, й // Вычислить среднее арифметическое ряда значений.
пятно Вузкевт с1аяз йчегаде ( якакгс чогс Матп() ( апк(] пшпз = пен ало[10] 1пС ачч = 01 = 99; = 10[ = 1001 = 181 = 78; = 23; = бзк = 91 = 87[ = 49; ппвз[0) ппвз[1) пшпз [21 пшпз [3] пшпз [4] ловя (5] пчвз [б] пива[7) пивз181 пшпз [91 ГОГ(1ПС 1=0; 1 < 101 1+4) Массивы часто применяются в программировании потому, что они дают возможность легко обращаться с большим числом взаимосвязанных переменных. Например, в приведенной ниже программе выявляется среднее арифметическое ряда значений, хранящихся в массиве ппвз, который циклически опрашивается с помощью оператора цикла Гсг. 176 Часть ).
Язык С№ ачч = ачч + паин (1) ачд = анч / 10) сопво1е.иг1сеьапе("среднее: " + ачч); ) ) Результат выполнения этой программы выглядит следующим образом: Среднее: 53 Инициализация массива В приведенной выше программе первоначальные значения были заданы для элементов массива ппвэ вручную в десяти отдельных операторах присваивания.
Конечно, такая инициализация массива совершенно правильна, но то же самое можно сделать намного проще. Ведь массивы могут инициализироваться, когда они создаются. Ниже приведена общая форма инициализации одномерного массива. тип[] имя массива = (на11, на12, ча13, ..., ча1Н); где ча11-ча1Н обозначают первоначальные значения, которые присваиваются по очереди, слева направо и по порядку индексирования. Для хранения инициализаторов массива в С№ автоматически распределяется достаточный объем памяти.
А необходимость пользоваться оператором пеи явным образом отпадает сама собой. В качестве примера ниже приведен улучшенный вариант программы, вычисляющей среднее арифметическое. // Вычислить среднее арифметическое ряда значения. ивапч зувкеи; с1авв ачегаче ( вкакас чохе Маап() ( апк[) паин = ( 99, 10, 100, 18, 78, 23, 63, 9, 87, 49 )р 1пк ачд = 0; бог(1пк 1=04 1 < 10; 1++) ачч = ачч + пива[1]т ачч = ачч / 104 Сопво1е.иг1ке11пе("Среднее: " + анч)т ) ) Любопытно, что при инициализации массива можно также воспользоваться оператором пеи, хотя особой надобности в этом нет.
Например, приведенный ниже фрагмент кода считается верным, но избыточным для инициализации массива наив в упомянутой выше программе. апк[] пиив = пеи 1пк[) ( 99, 10, 100, 18, 78, 23, 63, 9, 87, 49 ); Глава 7. Массивы и отро(и 177 Несмотря на свою избыточность, форма инициализации массива с оператором пеы оказывается полезной в том случае, если новый массив присваивается уже существующей переменной ссылки на массив.
Например: . тпс [) пцшв; пцшв = пеы ьпс[) ( 99, 10, 100, 18, 78, 23, 63, 9, 87, 49 )в В данном случае переменная пцшв объявляется в первом операторе и инициализируется во втором. И последнее замечание: при инициализации массива его размер можно указывать явным образом, но этот размер должен совпадать с числом инициализаторов. В качестве примера ниже приведен еще один способ инициализации массива пцшв. 1пс[) пцшв = пан 1пс [10) ( 99, 10, 100, 18, 78, 23, 63, 9, 87, 49 )в В этом объявлении размер массива пцшз задается равным 10 явно. Соблюдение границ массива Границы массива в СФ строго соблюдаются.
Если границы массива не достигаются или же превышаются, то возникает ошибка при выполнении. Для того чтобы убедиться в этом, попробуйте выполнить приведенную ниже программу, в которой намеренно превышаются границы массива. // Продемонстрировать превышение границ массива. цв1пч Бувсаги с1авв Аггаукгг ( всас1с чо10 Маьп() ( ьпс[) вашр1е = пен 1пс[10); 1пс 1~ // Воссоздать превышение границ массива. Гог(1 = Ов г < 100р г = 1+1) вашр1е[г) = 1; Как только значение переменной 1 достигнет 10, возникнет исключительная ситуация типа 1пг)ехОцсОГнапдеехсерс1оп, связанная с выходом за пределы индексирования массива, и программа преждевременно завершится. (Подробнее об исключительных ситуациях и их обработке речь пойдет в главе 13.) Многомерные массивы В программировании чаше всего применяются одномерные массивы, хотя и многомерные не так уж и редки.