Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев_С++_CLI_C#_Java_J#.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

Int X; // Выделить память в стеке

x= 5; // Установить значение

System::Console::WriteLine ("x= {0}", x.ToString()); /* Вывести значение

переменной x на консоль*/

//// Выделить память для объекта неуправляемого класса CFl в стеке

CFl cFls; // Выделить память в стеке

cFls.Set (0.01F); // Установить значение член-данного fl

System::Console::WriteLine ("cFls.fl= {0}", cFls.Get().ToString()); /* Вывести

значение член-данного fl на консоль */

//// Выделить память для целочисленного данного в куче

int *pX= new int; // Выделить память в неуправляемой куче

*pX= 55; // Установить значение

System::Console::WriteLine ("*pX= {0}", (*pX).ToString()); /* Вывести

значение на консоль*/

//// Выделить память для объекта неуправляемого класса CFl в куче

CFl *pCFl= new CFl; // Выделить память в неуправляемой куче

pCFl->Set(0.02F); // Установить значение

System::Console::WriteLine ("pCFl->fl= {0}", pCFl->Get().ToString());

//// Удалить данные из неуправляемой кучи

delete pX; // Удалить целочисленное данное из неуправляемой кучи

delete pCFl; // Удалить объект класса CFl из неуправляемой кучи

//// Выделить память для объекта управляемого класса CBool в куче

CBool ^pCBool= gcnew CBool(); // Выделить память в управляемой куче

pCBool->Set(true); // Установить значение

System::Console::WriteLine ("pCBool->b= {0}", pCBool->Get().ToString());

delete pCBool; // Нет ошибки

return 0;

}

Результат:

x= 5

cFls.fl= 0,01

*pX= 55

pCFl->fl= 0,02

pCBool->b= True

Программа примера 4.4.1 начинается с оператора включения файла stdafx.h, содержащего наиболее часто используемые константы и функции. Затем помещено описание простого неуправляемого класса CFl, содержащего переменную fl с плавающей точкой и две открьггые функции Set() и Get(). Интерфейсная функция Set() устанавливает значение закрытой переменной fl, а интерфейсная функция Get() получает её значение. Затем описан управляемый класс CBool, содержащий булевскую переменную b и функции установки и получения её значения. Обратим внимание - при описании управляемого класса перед словом class стоит ключевое слово ref.

Главная функция main() программы вначале выделяет в стеке память под целочисленную переменную x и под объект cFls класса CF1. Если в C++/CLI возможно размещение объекта в стеке, то в языках Java и C# это запрещено. В языках Java и C# объекты размещаются только в управляемой куче.

Дальше функция main() примера 4.4.1 размещает целое числа и объект класса CF1 в неуправляемой куче. Обращение к этим данным осуществляется через их указатели pX и pCFl, которым оператор new присвоил адреса соответствующих областей кучи. Указатель pX применён при присвоении значения целому числу в куче и при получении этого значения в функции WriteLine(). Указатель же pCFl применяется при вызове интерфейсных функций Set() и Get(). Перед завершением своего выполнения функция main() удаляет данные из кучи, воспользовавшись оператором delete. Перед завершением выполнения функция main() создаёт объект класса CBool в управляемой куче. Выделение области в управляемой куче и создание в ней объекта осуществляет оператор gcnew.

Та же программа без класса CBool на языках Java и C# приведена в примере 4.4.2. В языках Java и C# все классы являются управляемыми, оставим в примере только один управляемый класс CF1.