/* Esto es un comentario */
C++ define ademas otra forma de comentar una línea. Un comentario comienza con //, y continúa hasta el final de esa línea, donde termina automáticamente:
// Esto es un comentario
El nuevo método impide comentar inadvertidamente varias líneas de código. Esto podía ocurrir en C al olvidar incluir el final de la notación de comentario. Las dos formas de comentario pueden anidarse en C++.
Existe todavía otra forma de comentario, y es utilizando el preprocesador, vía #ifdef, #endif. Este es el mejor método para comentar varias líneas de código, ya que /* y */ no funcionarán si el código contiene comentarios del mismo tipo:
#if 0
a = b + c;
x = u * v;
#endif
include añade otro fichero en ese punto:
#include "horario"
añade un fichero llamado "horario" al programa, en el lugar donde
esté esta línea. Así, si el fichero que contiene
el #include es:
Las clases de C++ serán
# include "horario"
a partir de hoy.
y el fichero "horario" contiene:
todos los lunes, miércoles y viernes de doce a dos
el compilador leerá:
Las clases de C++ serán
todos los lunes, miércoles y viernes de doce a dos
a partir de hoy.
#include
para incluir el fichero que define esas funciones.
#include <iostream.h>
#include <math.h>
Esto indica al preprocesador que queremos incluir cabeceras de sistema, y no otras creadas por nosotros mismos.
cout, pero es algo diferente a
la función printf(), ya que no tenemos que indicarle el tipo de la variable que queremos
imprimir. Así se escribe en C++ el tradicional ejemplo "Hello, world":
main()
#include <iostream.h>
{
cout << "Hello, world";
}
El operador <<, llamado operador de inserción, le dice al sistema que imprima la
variable que le sigue, pero deja que el sistema decida cómo imprimir los datos. No le
hemos indicado el tipo de la variable que queremos imprimir, como se hacía con printf().
Es el sistema el que determina el tipo de la variable, y lo imprime adecuadamente. Tampoco hemos
formateado la salida. De nuevo es el sistema el que determina el número de cifras, el de
espacios en blanco ...
Se pueden utilizar los caracteres de escape de C. Por ejemplo, en el programa anterior podemos
añadir un retorno de carro:
main()
#include <iostream.h>
{
cout << "Hello, world\n";
}
cout saca por pantalla cualquier tipo de dato estándar que
existe en C++, bien sea un carácter, un número o movimientos
especiales del cursor,como \n en el ejemplo anterior. Veamos otro programa:
#include <iostream.h>
main()
{
int a;
float b;
a = 4;
b = 52.2;
cout <<"Vamos a imprimir un número entero:";
cout << a;
cout <<'\n';
cout <<"Y ahora uno real:";
cout << b;
cout <<'\n';
}
La salida de este programa es:
Vamos a imprimir un número entero: 4
El programa tambien podría haber sido escrito de la siguiente forma:
Y ahora uno real: 52.2
main()
#include <iostream.h>
{
int a;
float b;
a = 4;
b = 52.2;
cout <<"Vamos a imprimir un número entero:" <<
a <<'\n';
cout <<"Y ahora uno real:" << b <<'\n';
}
En este ejemplo, hemos indicado al compilador que imprima una cadena de caracteres, seguida
por un entero. Después, hemos imprimido una cadena distinta, seguida de un número
real. También hemos utilizado el retorno de carro, '\n'. Hemos mandado imprimir un
número real sin indicar su tipo. El sistema elige la salida apropiada basándose
en su tipo. Hemos perdido un poco de control, porque no tenemos control sobre el número
de dígitos significativos que imprimirá. Sin embargo, la función printf()
se puede utilizar en C++, y las dos formas de salida por pantalla pueden mezclarse en un
programa.
Veamos algunas características adicionales de la librería stream. El siguiente
programa imprime el valor de un numero en formato decimal (dec), octal (oct) y hexadecimal(hex).
main()
cout <<"El valor decimal de número es:" << numero
<< '\n';
cout <<"El valor hexadecimal de número2 es:" <<
numero2 << '\n';
}
#include <iostream.h>
La salida de este programa será:
{
int numero = 31;
int numero2 = 23;
cout <<"El valor octal de número es:" << oct
<<numero << '\n';
cout <<"El valor hexadecimal de número es:" << hex
<<numero << '\n';
El valor decimal de número es:31
Cuando se utiliza uno de los operadores especiales dec, oct o hex, todas las salidas sucesivas
tomarán ese número base. Así, numero2 se imprime en hexadecimal debido a
que esto es lo que se ha seleccionado en la anterior expresión cout. Si no se elige
ninguno de estos operadores especiales, se toma por defecto el formato decimal.
El valor octal de número es:37
El valor hexadecimal de número es:1f
El valor hexadecimal de número2 es:17
Cin el el comando complementario de cout. Lee lo que
se introduce desde el teclado, y en este sentido es también una caja
negra, pues no sabemos cómo lo hace. La sintaxis es similar a la de
cout:
#include <iostream.h>
main()
{
int numero;
cout << "Introduce un número:";
cin >> numero;
}
El operador >>, llamado operador de extracción, es obviamente el opuesto de <<:
toma los datos
de cin y los asigna a numero. Ya que
numero es un entero, cin convertirá la
entrada en un entero, si es posible; si la entrada es "hola", por
ejemplo, no debemos esperar que sea convertido a un entero.
Los operadores especiales dec, oct y hex también seleccionan la base para cin, de forma
separada a cout. Si no se especifica ninguna, la entrada será por defecto decimal.
\n | Newline |
\r | Retorno de carro. |
\t | Tabulador horizontal. |
\v | Tabulador vertical. |
\b | Espacio hacia atrás |
\a | Pitido |
\\ | Barra hacia atrás |
\? | Interrogación |
\' | comilla simple |
\" | comilla doble |
\0 | El entero 0. |
También se puede representar un carácter como un número octal de uno, dos o tres dígitos (\ seguido de número octal), o como un número hexadecimal de uno, dos o tres dígitos (\x seguido de dígitos hexadecimales). Pero el uso de la notación numérica hace que los programas sean no portables entre máquinas con diferentes conjuntos de caracteres.
# include
El índice i se ha definido dentro del bucle for. En algunos compiladores, su
validez se extiende hasta el final del bloque donde han sido definidos. En otros, como en el
g++, siguen estando definidos hasta el final del programa.
main ()
{
for (int i=0; i < 10; i++){
cout << "hola" << '\n';
}
}
const int numero = 14;
Estas constantes no pueden ser modificadas a lo largo del programa. Por eso deben ser definidas al mismo tiempo que declaradas. Sin embargo, el compilador no dará ningún mensaje de error si la constante no es inicializada.
Ejemplo.
void print(const int datos)
void main(void)
for (int indice = inicio ; indice < final ; indice ++)
#include <iostream.h>
{
cout << "El valor del indice es "<<datos<< '\n';
}
{
const int inicio = 3;
const int final = 9;
print(indice);
}
const también se utiliza en la función print para indicar que el parámetro datos es una constante dentro de la función. Cualquier intento de asignar un nuevo valor a esta variable dará un error de compilación. La salida del programa anterior es:
El valor del indice es 3
El valor del indice es 4
El valor del indice es 5
El valor del indice es 6
El valor del indice es 7
El valor del indice es 8
Deben utilizarse en lugar de los #define de C. Pueden utilizarse para especificar las dimensiones de una matriz:
const int dimen = 20;
double vector[dimen];
Veamos un ejemplo de su utilización:
main ()
for (int i=0; i < MaxDim; i++){
El índice exterior de la matriz es el que corre más rápido, al
contrario de lo que sucedía en FORTRAN.
En este ejemplo, ref es una referencia a un entero, numero. Por tanto, ambos ocupan la misma
localización de memoria. La referencia ref se convierte en sinónimo de la variable
numero. Las dos operaciones:
tienen el mismo efecto.
Ejemplo.
int indice = 13;
main()
cout <<"El valor de la variable local es:"<< indice <<
'\n';
::indice = indice + 7;
cout <<"El valor de la variable local es:"<< indice <<
'\n';
}
La salida de este programa es:
Se recomienda no abusar del uso del operador ::. Es mejor utilizar diferentes nombres para las
variables.
Se evalúa primero la condición que precede a ? (en este caso, a > b). Si la
condición es cierta, se ejecuta lo que sigue a ? (devuelve a). Si no, lo que sigue a :
(devuelve b).
En C++ las conversiones de tipo se pueden escribir también como una llamada a
función:
Veamos un ejemplo:
main()
{
z = (float)((int)x * (int)y);
cout << z << '\n' ;
# include <iostream.h>
{
const int MaxDim=3;
int vector[MaxDim][MaxDim] = {{1,2,3},{4,5,6},{7,8,9}};
for (int j=0; j < MaxDim; j++){
cout << vector [i][j] << '\n';
}
}
}Referencias
Además de la declaración normal de variables, C++ permite que se declaren
referencias como sinónimos de variables:
#include <iostream.h>
main()
{
int numero = 12;
int &ref = numero;
cout << "número tiene el valor:" << numero << '\n';
numero = 17;
cout << "ref tiene el valor:" << ref << '\n';
}
numero ++;
ref ++;
Cuando se declara, una referencia debe ser siempre inicializada
para referenciar a una variable. En caso contrario, el compilador dará error. Después
de su inicialización, la referencia no puede cambiarse para referenciar a otra variable.
El operador ::
El operador :: (scope) es una característica nueva, puesto que no existe nada similar en C.
Permite el acceso a una variable global aunque exista una variable local con el mismo nombre. El
uso de :: delante del nombre de la variable, indica al compilador que debe utilizar la variable
global, en lugar de la local, como se ilustra en el siguiente ejemplo:
#include <iostream.h>
{
float indice = 3.2567;
cout <<"El valor de la variable global es:"<< ::indice <<
'\n';
cout <<"El valor de la variable global es:"<< ::indice <<
'\n';
El valor de la variable local es:3.2567
El valor de la variable global es: 13
El valor de la variable local es:3.2567
El valor de la variable global es: 13
Operador ternario
Veamos un ejemplo:
int min (int a, int b)
{
int minimo;
return a < b ? a : b;
}
Conversiones de tipo
Las conversiones de tipo se hacen en C++ igual que en C:
c = (int)a;
c = int(a);
#include <iostream.h>
int a = 2;
float x = 17.2, y = 8.95, z;
cout << z << '\n' ;
z = (float)((int)(x * y));
cout << z << '\n' ;
z = x * y;
z = float(int(x) * int(y));
cout << z << '\n' ;
z = float(int(x * y));
cout << z << '\n' ;
}
El resultado de la ejecución será:
136
Este método puede parecer más legible que el anterior método utilizado en C,
pero los dos se pueden utilizar en C++. Incluso se pueden mezclar en un mismo programa, aunque ello
quizás dificulte su lectura.
136
153
153.045
136
136
153
153.045