
МИНОБРНАУКИ РОССИИ
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
«Тульский государственный университет»
Кафедра вычислительной техники
ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ
ЛАБОРАТОРНАЯ РАБОТА № 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;