Visual C++
De Wikipedia, la enciclopedia libre
Visual C++ [tambien conocido como MSVC] es el nombre de una herramienta [ IDE ] y un lenguaje de programación, producto de los lenguajes manejados por Microsoft C, C++ y C++/CLI. Esta especialmente diseñado para el desarrollo y depuracion de codigo escrito para las API's de Microsoft Windows, DirectX y la tecnologia Microsoft .NET Framework.
El IDE cuanta con herramientas poderosas como el IntelliSense, RemoteDebugin, Editar y Continuar, y Texto Resaltado.
Cuenta con una version Express, llamada Microsoft Visual C++ Express Edition, la cual es gratuita y se puede descargar desde el sitio de Microsoft
El lenguaje de programación utilizado por esta herramienta, de igual nombre está basado en C++, y es compatible en la mayor parte de su código con este lenguaje, a la vez que su sintaxis es exactamente igual. En algunas ocasiones esta incompatibilidad impide que otros compiladores, sobre todo en otros sistemas operativos, funcionen bien con código desarrollado en este lenguaje.
Algunas de las nuevas implementaciones es que el llamado codigo administrado (managed code), hace uso de una de las mejores herramientas dentro de .NET, el garbage colector.
Como declarar una clase gestionada por el garbage collector Visual Studio 2005:
ref class MiClase { // Codigo }
en Visual Studio 2003:
__gc class MiClase { // Codigo }
La keyword ref (ó __gc)le dice al compilador que esa clase sera manejada por el garbage collector, aunque, y a diferencia de otros lenguajes del .NET como C#, aun puede seguir llamando al destructor con delete.
Ahora veamos un ejemplo del programa HolaMundo con Visual C++.
using namespace System; ref class MiClase { public void HolaMundo() { Console::WriteLine("Hola Mundo"); } }; int main() { MiClase^ objeto = gcnew MiClase(); objeto->HolaMundo(); return 0; }
Las diferencias son pocas, en cuanto a sintaxis, el simbolo ^ indica qu se esta creando un puntero, se hace de esta forma por que los punteros nativos de C++ son dificiles de seguir por el garbage collector, asi que se debe de manejar de manera diferente. Para acceder a los metodos y miebros de la clase se usa -> cuando se tiene un puntero al igual que en C++ nativo.
La keyword gcnew crea el objeto devolviendo un puntero hacia este, gcnew se debe de usar para instanciar una clase manejada por el garbage collector, osea que a sido declara ref class, si la clase no es manejada class se usa new y * para crear un puntero, al igual que en C++.