Программирование >>  Элементы языков с и с++ 

1 ... 54 55 56 [ 57 ] 58 59 60 ... 200


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;



1 ... 54 55 56 [ 57 ] 58 59 60 ... 200

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика