On-line: гостей 0. Всего: 0 [подробнее..]
Программисты всех стран, объединяйтесь!

АвторСообщение



ссылка на сообщение  Отправлено: 26.09.13 15:42. Заголовок: В чем состоит различие между Managed C++ и managed C++?


Термин managed переводится на русский язык как управляемый. При использовании этого термина с языком программирования C++ обычно имеется в виду применение C++ в среде .Net Framework. Однако следует знать, что Managed C++ и managed C++ - это два различных понятия.

managed C++ - это просто указание на то, что язык C++ используется в среде .Net Framework, в то время как Managed C++ - это конкретная спецификация языка C++ для использования его в среде .Net Framework. Причем в настоящее время этот язык, то есть Managed C++, вышел из употребления, и Microsoft заменила его новой спецификацией, имеющей название C++/CLI.

Это не просто некоторая косметическая модификация спецификации C++ и смена названий для среды .Net Framework, а, по существу, описание нового языка с новыми ключевыми словами.

Увидеть эти существенные различия и сравнить отличия между Managed C++ и C++/CLI можно на примере простой программы. В нижеприведенной программе описан интерфейс с двумя методами и создается иерархия из двух классов, которые наследуют этот интерфейс: абстрактный класс Vehicle и производный от него класс Car.

У меня не было возможности скомпилировать код программы, написанном на основе Managed C++, так как, как я уже сказал, этот язык в настоящее время не поддерживается Microsoft. Тем не менее, я надеюсь, что код должен успешно компилироваться, если вы используете более ранние компиляторы MS VC.

Итак, как говорится, почувствуйте разницу!

Managed C++

 
#using <mscorlib.dll>
using namespace System;

namespace Lang
{

__gc __interface ISteering
{
void TurnLeft();
void TurnRight();
};

__gc class Vehicle abstract : public ISteering
{
public:
void TurnLeft()
{
Console::WriteLine( "Vehicle turns left." );
}

void TurnRight()
{
Console::WriteLine( "Vehicle turns right." );
}

virtual void ApplyBrakes() = 0;
};

__gc class Car : public Vehicle
{
public:
void ApplyBrakes()
{
Console::WriteLine( "Car trying to stop." );
throw new Exception( "Brake failure!" );
}
};

}

void main()
{
try
{
Lang::Vehicle *v = new Lang::Car();

v->TurnLeft();
v->ApplyBrakes();
}
catch ( Exception *e )
{
Console::WriteLine( e->Message );
}
}


C++/CLI

 
#include "stdafx.h"

using namespace System;

namespace Lang
{

interface class ISteering
{
void TurnLeft();
void TurnRight();
};

ref class Vehicle abstract : ISteering
{
public:
virtual void TurnLeft()
{
Console::WriteLine( "Vehicle turns left." );
}

virtual void TurnRight()
{
Console::WriteLine( "Vehicle turns right." );
}

virtual void ApplyBrakes() = 0;
};

ref class Car : Vehicle
{
public:
virtual void ApplyBrakes() override
{
Console::WriteLine( "Car trying to stop." );
throw gcnew Exception( "Brake failure!" );
}
};

}

int main()
{
try
{
Lang::Vehicle ^v = gcnew Lang::Car();

v->TurnLeft();
v->ApplyBrakes();
}
catch ( Exception ^e )
{
Console::WriteLine( e->Message );
}

return 0;
}


Код на C++/CLI был скомпилирован с использованием MS VS 2010.

Обратите внимание на частое использование двух знаков подчеркивания в ключевых словах Managed C++. Это одна из причин того, что спецификация managed C++ была переписана Microsoft, так как программистов раздражали ключевые слова с двумя начальными знаками подчеркивания, а потому Managed C++ не имел большой популярности.

В программе, написанной на Managed C++, функция main объявлена с типом возвращаемого значения void. В C# такое объявление main допускается. Поэтому и в Managed C++ также использовалось такое объявление main.

C++/CLI более строго соответствует стандарту C++, а потому функция main в программах, написанных на C++/CLI, должна иметь тип возвращаемого значения int, хотя предложение с return 0; можно не писать, как это допускается в стандартном C++.

Используемая здесь демонстрационная программа написана мною на основе примера кода на Managed C++, взятого мною из книги Thuan Kai, Hoang Lain ".NET Framework Essentials", Second Edition.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 1 [только новые]





ссылка на сообщение  Отправлено: 01.11.13 15:02. Заголовок: Я допустил неточност..


Я допустил неточность в предыдущем сообщении, поспешив заявить, что у меня не было возможности скомпилировать код программы, написанной на основе Managed C++.

На самом деле компилятор MS VC++ 2010 позволяет компилировать код, написанный на Managed C++. Для этого надо в свойствах проекта в разделе "Общие" в пункте "Поддержка общеязыковой среды выполнения" выбрать из предоставляемого перечня опций опцию "CLR-поддержка, старый синтаксис (/clr:oldSyntax)"

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 9
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет