|
Программирование >> Элементы языков с и с++
772 Глава S int tinain() Работа с созданным классом /*здесь с помощью конструктора в экземпляре класса (экземпляр с именем MyDate) устанавливаются заданные пользователем значения:*/ Date MyDate(21,3,2007); int d,m, y.-d-MyDate-getDayO ; d=21 in=MyDate.getMonth{); m=3 y=MyDate.getYear(); y=2007 printf{ d=%d, m=%d, y=%d\n ,d,m,y); У Date BirthDate ( 1, 12, 1938 ); /*изменить значение месяца на значение 4 в экземпляре MyDate:*/ MyDate.setMonth( 4 ); itF=MyDate.getMonth{) ; ю=А /♦изменить значение месяца на значение 5 в экземпляре BirthDate: */ BirthDate.setMonth( 5 ); m=BirthDate.getMonth{); m=5 Заметим, что у класса может быть много конструкторов. Когда создается класс, то для инициализации его различных полей и создаются различные конструкторы. Хотя все они имеют одинаковое имя, совпадающее с именем класса, тем не менее компилятор их различает по различным наборам параметров и типов. Деструктор класса Суть этой функции - обратная сути функции конструктора. Она призвана разрушить созданный конструктором экземпляр класса и освободить от него память. Имя деструктора совпадает с именем класса, но перед именем указывается знак тильда (~). Для предыдущего примера деструктор будет иметь вид: -Date {). Деструктор у класса должен быть один. je class MyClassV lie: int m i; Это обычные классы, только атрибут ref указывает, что его класс надо размещать в управляемой куче. Классы, структуры и массивы в среде CLR Классы и структуры Наряду с обычными классами и структурами (их еще называют native-классы и native-структуры), существуют классы и структуры для работы в среде CLR- Common Language Runtime (их еще называют managed-классы и managed-структуры). Эти конструкции будут располагаться в выделенной средой CLR-памяти и поэтому приложения с применением этого типа массива должны компилироваться с ключом /с1г. Приложения типа Windows Form этому условию удовлетворяют, а вот для консольных приложений надо выбирать шаблон их создания CLR Console Application . Объекты, гюпадаю-щие в память под управлением CLR, требуют в программе специального выделения памяти, т. к. они должны попасть на самом деле в динамическую память. Мы уже знаем, что указатели на такую управляемую память обозначаются символом Выделяют такую память с помощью утилиты gcnew. Структуры и классы для работы в режиме CLR могут быть ссылочного типа (перед именем класса или структуры стоит квалификатор ref) и типа значения (перед именем класса или структуры стоит квалификатор value). При объявлении такой конструкции первым квалификатором идет квалификатор доступа к данной конструкции. Для класса по умолчанию идет квалификатор private, а ДЛЯ структуры - public, ЧТО также имеет место и для эквивалентов этих конструкций в режиме native. В чем смысл этих конструкций? Например, возьмем классы: г f class MyClass Pjblic: . int m i; Глава i Например: MyClass mc = gcnew MyClass () ; Если же попробовать его разместить в native-куче, то компилятор выдаст ошибку. А для класса с атрибутом value компилятор разрешает это делать,j т. е. оператор: MyClassV *vv=new MyClassV() ; срабатывает. Пример: int main О Головная функция { MyClass mc = gcnew MyClass(); идет MyClass *mc=new MyClass(); не идет mc->m i=lll; присвоили значение члену класса int mci=mc->m i; достали значение из класса MyClassV - wgcnew MyClassV(); идет MyClassV *vv=new MyClassV(); идет w->m i=222; int mv=w->m i; Console::WriteLine( mci= + mci + mv= + mv); delete w; Результат: mci=lll mv= 222 Оказывается, что можно ссылаться из managed-типа на native-тип. Например, функция в managed-типе (классе или структуре) может принимать nativ параметр (например, struct). При этом если managed-тип и функция имеют] атрибут доступа public, то и native-тип должен иметь атрибут public. Например: include stdafx.h using namespace System; native-тип public struct N ( int i;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |