Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаб3.ТП.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
53.24 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

«Тульский государственный университет»

Кафедра вычислительной техники

ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ

ЛАБОРАТОРНАЯ РАБОТА № 3

Объектно-ориентированное программирование на управляемом С++ в интегрированной среде Visual Studio 2010

Проверил:

доцент кафедры ВТ

Г.Б. Берсенев

Выполнили студенты группы 220221с:

Арбузов С.В.

Дынникова А.И.

Волченкова Н.С.

Тула 2014

ЦЕЛЬ И ЗАДАЧИ РАБОТЫ

Ознакомление с технологией создания и отладки объектно-ориентированных программ на управляемом (managed) языке С++ в интегрированной среде разработки приложений Visual Studio 2010.

ЗАДАНИЕ НА РАБОТУ

1. Ознакомиться с технологией создания и отладки объектно-ориентированных программ на управляемом (managed) языке С++ в интегрированной среде разработки приложений Visual Studio 2010 в процессе создания приложений HelloWorld, Some, StringReplace, StringLiteral, MixingStringTypes, ArraySyntax, IndexOutOfRangeException, Array1, Array2, Test1, Array1_05, Array2_05.

2. Разработать и отладить объектно-ориентированную программу на управляемом (managed) языке С++ в интегрированной среде разработки приложений Visual Studio 2010 в соответствии с заданием преподавателя. Примерами заданий могут быть следующие:

Разработать и реализовать класс Complex, позволяющий использовать его в следующей программе:

Complex x(1.3,4.2), y(4.0, 8.1), z(y); x.add(y); z.assign(plus(x,y)); z.print();

ХОД РАБОТЫ

//HelloWorld.cpp

#using <mscorlib.dll> //required by managed C++ code

void main(void)

{

System::Console::WriteLine("Hello World");

}

Рис. 1. Программа HelloWorld.cpp

#using <mscorlib.dll>

#include <stdio.h>

// Директива компилятору на генерацию неуправляемого кода.

#pragma unmanaged

// Эта функция будет неуправляемой, она будет транслирована

// в чистый машинный код.

void UnmanagedFunction()

{

printf("Hello, World, from UnmanadegFunction!\n");

}

// Директива компилятору генерировать управляемый код.

#pragma managed

// Это управляемая функция, она будет транслирована в набор инструкций

// .NET байт-кода.

void ManagedFunction()

{

System::Console::WriteLine("Hello, World, from ManagedFunction!");

UnmanagedFunction();

}

// Эта функция также будет управляемой.

void main()

{

ManagedFunction();

}

Рис. 2. Программа Some.cpp

//StringReplace.cpp

#using <mscorlib.dll>

using namespace System; //for Console and String

using namespace System::Text; //for StringBuilder

Void main(void)

{

Console::WriteLine("String is immutable:");

String *ps1 = S"Hello World";

String *ps2 = ps1->Replace('H', 'J');

Console::WriteLine(ps1);

Console::WriteLine(ps2);

Console::WriteLine("StringBuilder can be modified:");

StringBuilder *psb1 = new StringBuilder(S"Hello World");

StringBuilder *psb2 = psb1->Replace('H', 'J');

Console::WriteLine(psb1);

Console::WriteLine(psb2);

char *ps3 = "ASCII string literal"; // неуправляемый объект

__wchar_t *ps4 = L"Unicode string literal"; // неуправляемый объект

String *ps5 = S"String object literal"; // управляемый объект

Console::WriteLine(ps3);

Console::WriteLine(ps4);

Console::WriteLine(ps5);

}

Рис. 3. Программа StringReplace.cpp

//StringLiteral.cpp

#using <mscorlib.dll>

using namespace System;

Void main(void)

{

String *pstr1;

String *pstr2;

//comparing literal String objects

pstr1 = S"hello";

pstr2 = S"hello";

if (pstr1->Equals(pstr2))

Console::WriteLine("equal"); //executed

else

Console::WriteLine("not equal"); //not executed

if (pstr1==pstr2)

Console::WriteLine("equal"); // executed

else

Console::WriteLine("not equal"); //not executed

//comparing new String objects (nonliteral)

pstr1 = new String("hello");

pstr2 = new String("hello");

if (pstr1->Equals(pstr2))

Console::WriteLine("equal"); // executed

else

Console::WriteLine("not equal"); //not executed

if (pstr1==pstr2)

Console::WriteLine("equal"); //not executed

else

Console::WriteLine("not equal"); //executed

}

Рис. 3. Программа StringLiteral

//MixingStringTypes.cpp

#using <mscorlib.dll>

using namespace System;

#include <wchar.h> //for wchar_t

void ExpectingManagedString(String *str){}

void ExpectingASCIIString(char *str){}

void ExpectingUnicodeString(wchar_t *str){}

Void main(void)

{

//expecting a managed type

ExpectingManagedString(S"hello"); //perfect match

ExpectingManagedString("hello"); //no error

ExpectingManagedString(L"hello"); //no error

//expecting an unmanaged type

ExpectingASCIIString("hello"); //perfect match

//ExpectingASCIIString(S"hello"); //error!

ExpectingUnicodeString(L"hello"); //perfect match

//ExpectingUnicodeString(S"hello"); //error!

}

Рис. 4. Программа MixingStringTypes

//ArraySyntax.cpp

#using <mscorlib.dll>

using namespace System;

#pragma warning(disable : 4101) //kill unrefed var warning

Void main(void)

{

//traditional unmanaged array syntax

int *pintUnanagedArrayOnHeap = new int [5];

int intUnManagedArray[5]; //no error for unmanaged array

//managed array syntax using the __gc keyword

int intManagedArrayOnHeap __gc[] = new int __gc[5];

//int intManagedArray __gc[5]; //error for managed array

//managed array syntax using a managed element type

String *strManagedArrayOnHeap[] = new String*[5];

//String *strManagedArray[5]; //error for managed array

}

Рис. 5. Программа ArraySyntax

//IndexOutOfRangeException.cpp

#using <mscorlib.dll>

using namespace System;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]