C versus C++

C++ es una extensión de C con características más potentes. Estrictamente hablando, es un superconjunto de C. Al igual que sucede con Java y C# que son superconjuntos de C++.

El ANSI C estándar no sólo define el lenguaje C sino que también define una biblioteca de C estándar que las implementaciones de ANSI C deben soportar.

C++ también utiliza esa biblioteca, además de su propia biblioteca estándar de clases. Hace unos años se revisó el nuevo estándar de C, denominado C99 que fue adoptado por ISO en 1999 y por ANSI en 2000.

El estándar de C ha añadido algunas características que soportan algunos compiladores de C++.

Por estas razones casi todas las sentencias de C también tienen una sentencia correcta en C++, pero no es cierto a la inversa.

Los elementos más importantes añadidos a C para crear clases C, objetos y programación orientada a objetos (C++ fue llamado originalmente “C con clases”).

Sin embargo, a C++ se han añadido nuevas características, incluyendo un enfoque mejorado de la entrada/salida (E/S) y un nuevo medio para escribir comentarios. La figura muestra las relaciones entre C y C++
Características de C y C++.

De hecho las diferencias prácticas entre C y C+ son mucho mayores que lo que se pueda pensar.

Aunque se puede escribir un programa en C++ similar a un programa en C, raramente se hace. C++ proporciona a los programadores las nuevas características de C++ y enfatiza a utilizar estas características, pero también se suele utilizar en partes de los programas las características específicas y potentes de C.

Si usted ya conoce C, muchas propiedades le serán familiares y aprenderá de un modo mucho más rápido y eficiente, pero encontrará muchas propiedades nuevas y muy potentes que le harán disfrutar con este nuevo lenguaje y construir sus programas aprovechando la potencia de orientación a objetos y genérica de C++.

Nuestro objetivo es ayudarle a escribir programas POO tan pronto como sea posible, sin embargo, como ya se ha observado, muchas características de C++ se han heredado de C, de modo que, aunque la estructura global de un programa pueda ser POO, consideramos que usted necesita conocimientos profundos del “viejo estilo procedimental”.

Por ello, los capítulos de la primera parte del libro le van introduciendo lenta y pausadamente en las potentes propiedades orientadas a objetos de las últimas partes, al objeto de conseguir a la terminación del libro el dominio de la Programación en C++.

Este libro describe el estándar ANSI/ISO C++, segunda edición, (ISO/IEC 14882:2003), de modo que los ejemplos funcionarán con cualquier implementación de C++ que sea compatible con el estándar.

Sin embargo, pese a los años transcurridos, C++ Standard se suele considerar todavía nuevo y se pueden encontrar algunas discrepancias con el compilador que esté usted utilizando.

Por ejemplo, si su compilador no es una versión reciente, puede carecer de espacios de nombres o de las características más novedosas de plantillas, como la clase “String” y la Standard Template Library que no son compatibles con los compiladores más antiguos.

También puede suceder que si un compilador no cumple el estándar, algunas propiedades tales como el número de bytes usados para contener un entero, son dependientes de la implementación.

El futuro de C++

C++ continúa evolucionando y se habían realizado ya trabajos para producir la próxima versión del estándar. La nueva versión se ha llamado de modo informal como C++0X, ya que se espera su terminación al final de esta década, alrededor de 2009.

Bjarne Stroustrup ha publicado el 2 de enero de 2006, un artículo titulado The Sc++ Source: A Brief Look at C++0X donde plantea brevemente los principios del trabajo del nuevo estándar y las esperanzas que existen para que el comité ISO C++ termine sus trabajos en 2008 y se puede convertir de facto en el nuevo estándar C++09.

En otras palabras, comenta Struous-trup, se trata de reforzar el estándar C++98 que ya es un lenguaje fuertemente implantado.

Se pretende hacer de C++ un lenguaje mejor para programación de sistemas y construcción de bibliotecas, así como un lenguaje C++ que sea más fácil de enseñar y de aprender.