|
Программирование >> Элементы языков с и с++
Массивы в языке С++ наряду с обычным объявлением массива в виде тип Имя[раз-мерность] (native-массивы) можно объявить массив, пользуясь ключевым словом array (managed-массивы). Этот массив будет располагаться в выделенной средой CLR памяти. Синтаксис объявления такого массива следующий: [qualifiers] [cli::] array< [qualifiers] typel [, dimension] var = gcnew [cli:: ]array<type2[, dimension]>(val[,val-]) Здесь: D dimension- размерность массива. По умолчанию размерность массива равна 1 (одномерный массив). Максимальная размерность равна 32 (32-мерный массив); П val - количество элементов массива; n qualifiers - спецификатор класса памяти. Значениями этого параметра могут быть: mutable, volatile, const, extern и static. }(fiaccbi в С++ 775 public ref struct R managed-тип 1 функция, у которой параметр nn имеет native-тип N int f(N nn) ( nn.i++; return(nn.i); int main 0 Головная функция 1 R г = gcnew R; N n; n.i=333; int ni=r->f (n) ; Console: :WriteLine ( ni= + ni) ; Квалификатор mutable, например, означает, что если массив имеет такой квалификатор и является членом класса, то ему может присваивать значение функция (тоже член класса), у которой есть квалификатор const (см. пример этой функции в листинге 8.5). В объявлении массива этого типа присутств)ет утилита gcnew, которая сразу же в объявлении выделяет под экземпляр массива CLR-память. Пример работы с рассмотренным массивом приведен в листинге 8.6, а ре-1 зультат - на рис. 8.5. Пояснения к тексту программы даны в самом тексте. I Листинг 8.6 3 Array-массивы.срр : main project file. #include stdafx.h compile with: /clr using namespace System; этот оператор подключается в заготовку автоматически, когда вы задаете CLR-шаблон консольного приложения ttdefine ARRAYSIZE 2 value struct MyStruct managed-value-структура 1 int m i; ref class MyClass managed-ref-класс ( public: int m i; struct MyNativeClass native-структура ( int m i; Функция возвращает массив целых чисел типа Int32. array<Int32> TestlO <Int32> - тип массива int i; .♦объявление массива с именем local[] (это массив ссылок на числа типа Int32):*/ array< Int32 local = gcnew array< Int32 >{ARRAY SIZE); for (i = 0 ; i < ARRAY SIZE ; i++) local [i] = i + 10; return local; /♦Функция модифицирует массив, т.к. через указатели это можно делать с внешними переменными:*/ void Test2 (аггау< MyNativeClass * local) Эта функция возвращает массив ссылочного типа (массив ссылок): array<MyClass> TestO() <MyClass> - тип массива: ссылки на класс 1 int 1; /♦объявление массива с именем local[] (это массив ссылок на класс):*/ аггау< MyClass local = gcnew array< MyClass > (ARRAY SIZE) ; for (1=0; i < ARRAY SIZE ; i++) 1 /*Дпя к£1ждого элемента массива надо создать экземпляр класса HyClass, чтобы получить доступ к члену этого класса:*/ local[1] = gcnew MyClass; возвращает ссылку на вьщеленную память local[i] -> m i = i; члену экземпляра класса MyClass m i присваивается значение 1 return local; возвращается массив ссылок на созданные объекты класса
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |