отчет по практике. Колледж инновационных технологий КарТУ
Скачать 74.63 Kb.
|
2 Массив. Объявление Инициализация массивов Массивы как параметры.В C++ возможно лишь поэлементное копирование массивов. Этим объясняется то обстоятельство, что в списке объявлений параметров не объявляются параметры-массивы. В Borland С++ 4.5 транслятор спокойно реагирует на объявление одномерного массива в заголовке функции, проверяет корректность его объявления (размеры массива должны быть представлены константными выражениями), однако сразу же игнорирует эту информацию. Объявление одномерного массива-параметра преобразуется к объявлению указателя. Подтверждением этому служит тот факт, что "массив"-параметр невозможно проинициализировать списком значений, что совершенно нормально для обычных массивов: void ff(int keyArr[ ] = {0,1,2,3,4,5,6,7,8,9});// Ошибка объявления. void ff(int keyArr[10] = {0,1,2,3,4,5,6,7,8,9});// Ошибка объявления. Оба варианта прототипа функции будут отвергнуты. При этом транслятор утверждает, что указателю (и это несмотря на явное указание размеров массива!) можно присваивать значение адреса, либо NULL. int keyArr[100]; // Глобальный массив. int xArr[5]; // Ещё один глобальный массив. int XXX; // Простая переменная. void ff(int keyArr[ 1] = keyArr, //Объявление одноименного параметра. int pArr1 [10] = xArr, int pArr2 [ ] = &XXX, // Адрес глобальной переменной. int pArr3 [ ] = &xArr[10], //Адрес несуществующего элемента. int pArr4 [50] = NULL); Инициализация массива спецификатор типа имя_массива [размерN] ... [размер1] = {список значений}; Список значений - это разделенный запятыми список констант, совместимых по типу со спецификатором типа. Первая константа помещается в первый элемент массива, вторая - во второй и так далее. За последней константой списка нет запятой. Обратим внимание, что точка с запятой следует за}. 2.1 ValueType и ReferenceType. Встроенный сервис по обслуживанию простых массивов. Спецификатор params.Value Type и Reference Type. Два типа массивов Рассмотрим следующее объявление: MyType[] myArray = new MyType[10]; Результат выполнения этого оператора зависит от того, что собой представляет тип MyType. Возможны всего два варианта: MyType может быть типом-значением или типом-ссылкой. Если это тип-значение, результатом выполнения оператора будет массив, содержащий 10 объектов MyType с предопределенными значениями. Если MyType является ссылочным типом, то в результате выполнения данного оператора будет создан массив из 10 элементов типа "ссылка", каждый из которых будет проинициализирован пустой ссылкой – значением null. Доступ к элементам массива реализуется в соответствии с правилом индексации – по каждому измерению индексация осуществляется с НУЛЯ до n–1, где n – количество элементов размерности. Встроенный сервис по обслуживанию простых массивов При работе с массивами следует иметь в виду одно важное обстоятельство. В .NET ВСЕ массивы происходят от ОДНОГО общего (базового) класса Array. Это означает, что ВСЕ созданные в программе массивы обеспечиваются специальным набором методов для создания, управления, поиска и сортировки элементов массива. К числу таких методов и свойств, в частности, относятся следующие свойства: public int Length {get;} Возвращает целое число, представляющее общее количество элементов во всех измерениях массива. public int Rank {get;} Возвращает целое число, представляющее количество измерений массива. 2.2 Перегрузка операций. Операторная функция. Унарные операторные функции и Бинарные операции.Бинарную операцию можно определить как функцию-член с одним параметром, или как глобальную функцию с двумя параметрами. Значит, для любой бинарной операции @ выражение aa @ bb интерпретируется либо как aa.operator(bb), либо как operator@(aa,bb). Если определены обе функции, то выбор интерпретации происходит по правилам сопоставления параметров. Префиксная или постфиксная унарная операция может определяться как функция-член без параметров, или как глобальная функция с одними параметром. Для любой префиксной унарной операции @ выражение @aa интерпретируется либо как aa.operator@(), либо как operator@(aa). Если определены обе функции, то выбор интерпретации происходит по правилам сопоставления параметров. Для любой постфиксной унарной операции @ выражение @aa интерпретируется либо как aa.operator@(int), либо как operator@(aa,int). Если определены обе функции, то выбор интерпретации происходит по правилам сопоставления параметров. После того как объявлены операторы true и false, могут быть объявлены операторные функции — конъюнкция и дизъюнкция. Эти функции работают по следующему принципу: после оценки истинности (критерий оценки задается при объявлении операций true и false ) операндов конъюнкции или дизъюнкции функция возвращает ссылку на один из операндов либо на вновь создаваемый в функции объект; в соответствии с ранее объявленными операциями true и false, операторные конъюнкция и дизъюнкция возвращают логическое значение, соответствующее отобранному или вновь созданному объекту: public static Point2D operator | (Point2D par1, Point2D par2) { if (par1) return par1; // Определить "правильность" объекта par1 можем! if (par2) return par2; // Определить "правильность" объекта par2 можем! return new Point2D(10.0F, 10.0F); // Вернули ссылку на // новый "неправильный" объект. } |