C++ es un lenguaje compilado que adopta los paradigmas imperativo y orientado a objetos.

Proviene de C, lo cual le brinda características de bajo nivel. Su nombre lleva el operador de incremento que se utiliza en C (++), indicando que es una “mejora” de C.

El punto de inicio de un programa en C++ es la función main (que retorna un entero y no recibe parámetros), por lo que esta función es imprescindible para que compile.

Detalles de sintaxis importantes: los bloques de código se definen entre llaves y las instrucciones finalizan con punto y coma. Los strings se indican con doble comilla.

Como detalle semántico, las variables deben declararse (indicando su tipo de datos) antes de utilizarse. También debe indicarse el tipo de valor de retorno de las funciones y el tipo de los parámetros que reciben (ya que C++ no es un lenguaje dinámico, como Python).

Para poder utilizar funcionalidad de entrada/salida de datos, se importa la biblioteca iostream colocando al principio #include <iostream>. Esto no es obligatorio, pero normalmente será necesario en la mayoría de los programas.

De la misma forma, para utilizar strings se recomienda importar la biblioteca correspondiente, mediante #include <string>

Ejemplo 1: “Hello World” en C++

#include <iostream>
int main()
{
   std::cout << "Hello, world!\n";
   return 0
} 

En este ejemplo, la función main retorna el valor 0 (aunque esto no es imprescindible para que el programa compile). Normalmente se utiliza el número 0 para indicar que no hubo error. Es decir, esta función retornará 0 si llega a ejecutarse hasta el final sin ningún error.

Ejemplo 2: para evitar tener que agregar std:: cada vez antes de cin, cout y otras instrucciones, podemos definir el espacio de nombres std (abreviatura de “standard”).

#include <iostream>
using namespace std;

int main() 
{
    cout << "Hello, world!\n";
    return 0; 
} 

La directiva “using” indica que se use ese espacio de nombres cada vez que sea necesario.

Un espacio de nombres es un ámbito dentro del cual los identificadores de variables, funciones, clases, etc. son únicos. Es decir, podrían existir dos espacios de nombres diferentes, cada uno con una función llamada miFuncion() y con contenidos diferentes. Al no compartir el espacio de nombres, cada función puede llamarse por separado, anteponiendo el espacio de nombres:

Ejemplo 3:

namespace unEspacio
{
  void miFuncion()
  {
    // cuerpo de la función unEspacio::miFuncion()
  }
}

namespace otroEspacio
{
  void miFuncion()
  {
    // cuerpo de la función otroEspacio::miFuncion()
  }
}

La forma de leer datos e imprimir datos en la pantalla es utilizando las instrucciones cin y cout respectivamente. Éstas trabajan mediante un concepto llamado “stream de datos”, que no es más que un buffer (un espacio compartido de la memoria) donde se colocan los datos en el orden en que llegan y luego se toman uno a uno, también en orden.

Tanto cin como cout utilizan las entradas y salidas de datos estándar. También hay otros streams aparte del estándar, que se usan para propósitos específicos (por ejemplo, cerr es para errores y clog es para registro de logs).

cout

Ejemplo 4: La instrucción cout se utiliza seguida del operador de inserción << que inserta en el stream estándar lo que sigue a continuación de ese operador.

cout << "esto se imprime en la pantalla";   // imprime el string literal en la pantalla
cout << 45;                                 // imprime el entero literal en la pantalla
cout << x;                                  // imprime el valor de x en la pantalla

Ejemplo 5: También se pueden encadenar datos para enviarse a la salida estándar e imprimirlos en pantalla, unos a continuación de otros, sin espacios.

cout << "El valor de la variable x es: " << x << "y esto es un ejemplo";

Ejemplo 6: cout no agrega automáticamente un salto de línea luego de imprimir (el cursor queda en la misma línea) y es necesario indicar expresamente que se comience una nueva línea, con \n.

cout << "Esta oración...";
cout << "...y esta otra se imprimen en una sola línea." << \n; 
cout << "Esta cadena empieza en una nueva línea";

Ejemplo 7: De forma similar a \n puede utilizarse endl, que también crea una nueva línea pero, además, elimina los contenidos del stream.

cout << "Algo para imprimir." << endl;

cin

cin lee de la entrada de datos estándar y coloca lo leído en el stream estándar. Normalmente, la entrada estándar por defecto es el teclado (aunque esto puede configurarse) y cin hace que se espere una entrada mediante el teclado, seguida de la tecla Enter.

Ejemplo 8: cin se usa con el operador de extracción >> seguido por una variable donde se guardan los datos extraídos.

int edad;
cin >> edad;

Nótese que la variable edad se declaró (como de tipo entero -int-) antes de utilizarse. cin utiliza este tipo de la variable que encuentra luego del operador de extracción para saber cómo debe interpretar los datos leídos. El inconveniente que esto tiene es que, si los datos ingresados no son del tipo esperado (por ejemplo, la variable es de tipo int pero el usuario ingresa letras), la extracción de los datos falla pero el programa continúa, lo cual produce resultados inesperados al intentar leer la variable posteriormente.

Ejemplo 9:

#include <iostream>
using namespace std;
     
int main()
{
    	int i;
    	cin >> i;
    	cout << "El valor ingresado es: " << i;
    	return 0;
}

En cuanto a los strings, cin considera que los espacios en los strings cortan la entrada de datos, entonces, si la variable es de tipo string y el usuario ingresa espacios, sólo quedará la primera palabra. Para poder ingresar un string que contenga espacios, se utiliza la función getline, que recibe como primer parámetro a cin y como segundo parámetro a la variable donde almacenar el string:

Ejemplo 10:

#include <iostream>
#include <string>
using namespace std;

int main ()
{
  string nombre;
  cout << "Ingresa tu nombre: ";
  getline (cin, nombre);
  cout << "Hola " < nombre << ".\n";
  return 0;
}

Estructuras de control

Si lo que queremos es escribir una estructura de control como if, for o while, tendremos que incluir la condición entre paréntesis:

Ejemplo 11:

int edad;
cout << "Ingresar edad de la persona: ";
cin >> edad;
if (edad >= 18)
    cout << "\nLa persona es mayor de edad: ";
else
    cout << "\nLa persona es menor de edad: ";