Vous êtes sur la page 1sur 28

Tutorial rapido de C++

por Cesar Rodriguez

Este tutorial es gratuito, puedes distribuirlo libremente siempre que sea en forma gratuita y en forma
completa sin alteración alguna. La distribución en cualquier medio de este tutorial comercialmente queda
estrictamente prohibida sin consentimiento por escrito del autor.

© Copyright 2005, todos los derechos reservados por Rogelio Cesar Rodriguez Cervantes

Informacion de contacto:
e-mail 1 : cesarrdz@gmail.com
e-mail 2 : cesarrdz@excite.com
Sito web: http://cesar.crbyte.com

Visita:
http://cesar.crbyte.com para mas tutoriales, lenguaje C, programas con codigo fuente, etc.
http://crbyte.com para juegos de computadora que puedes bajar gratis

Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 1


1. Instrucciones Basicas
1.1 Estructura de un programa
1.2 Tipos de datos
1.3 Declaracion de variables
1.4 Constantes
1.5 Operadores
1.6 Precedencia y evaluacion de operadores
1.7 Arreglos
1.8 Clase string

2. Control de flujo
2.1 Instrucciones de condicion (if-else)
2.2 Anidamiento de instrucciones
2.3 Instrucciones de repetición
2.4 Instrucciones de condicion (switch)

3. Punteros y cadena de caracteres


3.1 Definicion de puntero
3.2 Manejo dinamico de memoria
3.3 Cadenas de caracteres
3.4 Argumentos en la linea de comandos
3.5 Referencia

4. Modulos
4.1 Alcance de variables
4.2 Funciones definidas por el usuario
4.3 Argumentos de funciones
4.4 Modulos

5. Estructuras y clases
5.1 Estructuras
5.2 Clases

6. Archivos
6.1 Corrientes de flujo
6.2 Archivos

Bibliografia

Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 2


1 Instrucciones Básicas
1.1 Estructura de un programa
Un programa en C++ puede verse como un grupo de bloques construidos llamados funciones. Una
función es una o mas instrucciones en C++ designadas para una tarea especifica.

Listado 1.1 texto completo de primer.cpp


// Programa : Primer.cpp
// Descripcion: Escribe un mensaje en pantalla
#include<iostream.h>

int main() {
cout << "Este es mi primer programa en C++";

return 0;
}

1.2 Tipos de datos


char - caracteres
int - enteros
long - enteros largos
float - flotante, numero con fraccion
double - double, numero con fraccion
void - sin valor

1.3 Declaración de variables


Todas las variables deben de ser declaradas antes de utilizarlas, aunque ciertas declaraciones se
realizan implícitamente por el contexto. Una declaración especifica un tipo, y le sigue una lista de
una o mas variables de ese tipo.

Ejemplo:
int a, b;
char c;

Las variables también se pueden inicializar en su declaración.

Ejemplo:
int i = 0;
float x = 3.4;

El lenguaje C++ hace distinción entre minúsculas y mayúsculas.

Ejemplo:
'linea' es diferente de 'LINEA' y de 'Linea'

Listado 1.2 texto completo de condolar.cpp


// Programa: CONDOLAR.CPP
// Desc. : Convierte pesos a dolares
#include <iostream.h>
void main(void){
int pesos;
float dolares;

Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 3


cout << endl << "Cuantos pesos desea convertir a dolares? ";
cin >> pesos;

dolares = pesos / 11;


cout << "Dolares = " << dolares;
}

1.4 Constantes
Las constantes de C++ son los valores fijos que el programa no puede alterar. Las constantes de
carácter están encerradas entre apóstrofes ademas estas tienen un tipo de datos.

Ejemplos de constantes
'a', '%' constantes de tipo char
123L constante long
123.3 constante float

Listado 1.3 texto completo de lconst.cpp


// Programa: lconst.cpp
// Desc. : Ejemplo de constantes
#include <iostream.h>
main(){
cout << endl << 1/2;
cout << endl << 1.0/2;
cout << endl << float(1)/2;
}

Nota: en la ultima linea se usa la construccion cast para forzar la conversión explícita del tipo de
una dato.

Constantes de carácter no imprimibles


CÓDIGO SIGNIFICADO
\b retroceso
\f alimentación de hoja
\n nueva linea
\r retorno de carro
\t tabulador horizontal
\" doble comilla
\' apóstrofe o simple comilla
\0 nulo
\\ barra invertida
\v tabulador vertical
\a alerta
\o constante octal
\x constante hexadecimal

1.5 Operadores
Operadores aritméticos
Operador Acción
- resta y menos unario
+ suma
* multiplicación
/ división
% modulo de división
Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 4
-- decremento
++ incremento

Operadores relaciónales
Operador Acción
> mayor que
>= mayor que o igual que
< menor que
<= menor o igual que
== igual
!= no igual

Nota:
El doble signo igual == es la notación de C++ para "es igual a". Este símbolo se distingue de la
condición de igualdad del simple = empleado en las asignaciones.

Operadores lógicos
Operador Acción
&& and
|| or
! not

Incremento
++ Incrementa en uno

Decremento
-- Decrementa en uno

Ejemplo:
n = i++;

Es equivalente a:
n = i;
i = i +1;

n = ++i;
Es equivalente a:
i = i +1;
n = i;

Al usar la forma de prefijo la variable se incrementa o decrementa antes de ser usada; en la forma
pos fijo la variable primero se usa y después se incrementa o decrementa según sea el caso.

Listado 1.4 texto completo de mas_mas.cpp


//Programa : mas_mas.cpp
// Descripción: Desmostracion del operador unario ++
#include <iostream.h>
void main(void) {
int i;

i = 10;
i++;
Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 5
cout << "i = " << i;
cout << "\nSalida en posfija de i++ = " << i++;

cout << "\n\nalida de i = " << i;


cout << "\nSalida prefija de ++i = " << ++i;
}

1.6 Precedencia y orden de evaluación de operadores


Operador Asociatividad_____
() [] -> . izquierda a derecha
! ~ ++ -- - (tipo) * & sizeof derecha a izquierda
* / % izquierda a derecha
+ - izquierda a derecha
<< >> izquierda a derecha
< <= > >= izquierda a derecha
== != izquierda a derecha
& izquierda a derecha
^ izquierda a derecha
| izquierda a derecha
&& izquierda a derecha
|| izquierda a derecha
?: derecha a izquierda
= += -= etc. izquierda a derecha
, derecha a izquierda

Namespaces
Un namespace es el alcance en el cual los tipos de datos pueden ser definidos para evitar la
sobrecarga del espacio de alcance global. Por omision cuando un nuevo tipo de dato es definido
este existe globalmente. Lo cual significa que esta disponible a cualquier funcion en la aplicacion.
Por ejemplo si declaramos una estructura como la siguiente:

struct Fecha {
}

Despues no podemos declarar un arreglo como el siguiente:

int Fecha[] = { }

Al menos que lo declaremos en un namespace diferente, por ejemplo:

namespace abc {
struct Fecha {
};
};

namespace xyz {
int Fecha[] = { };
}

Para hacer referencia al tipo de datos que necesitemos usamos el operador de alcance ::

abc::Fecha
xyz::Fecha

Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 6


1.7 Arreglos
Forma general de un arreglo unidimiensional:
tipo nombre_variable[tamaño]

En C++ todos los arreglos usan el cero como índice del primer elemento.
Ejemplo:
int lista[10]

Declara un arreglo llamado lista con diez elementos desde lista[0] hasta lista[9].

El lenguaje C++ no realiza comprobación de contornos en los arreglos. Si se sobrepasa el final


durante una operación de asignación, entonces se asignaran valores a otras variables en memoria o
memoria usada por el propio código del programa.

Listado 1.5 texto completo de fecha.cpp


// fecha.cpp
#include <iostream>
using namespace std;

void main() {
int fecha[3];

fecha[0] = 8; // mes
fecha[1] = 21; // dia
fecha[2] = 2003;// año

cout << "Fecha ";


cout << fecha[0] << '/' << fecha[1] << '/' << fecha[2];
}

1.8 Clase string


Un string es básicamente una secuencia de caracteres que puede ser indexada. En la librería de
C++ estándar, un string es un clase del tipo template llamada basic_string.
Los programas que usen la clase string deben incluir el archivo de encabezado: #include <string>

Listado 1.6 texto completo de run_prog.cpp


// run_prog.cpp
#include <iostream>
#include <string>
using namespace std;

int main() {
string strFileName;

cout << "Aplicacion a ejecutar? ";


cin >> strFileName;

cout << "Ejecutandose Aplicacion " << strFileName << endl;


cout << "El nombre de la aplicacion tiene "
<< strFileName.length()
<< " letras";

system(strFileName.c_str());

return 0;
}

Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 7


2 Control de flujo
2.1 Instrucciones de condicion (if-else)
Para tomar decisiones.
Forma general:
if (condición)
sentencia-1;
else
sentencia-2;

La parte else es opcional. Si la condición es verdadera; distinta de cero, se ejecuta la sentencia-1, si


la condición es falsa; igual a cero se ejecuta la sentencia-2.

Nota: El lenguaje C++ no restricciona el tipo de expresiones a solo las que invocan operadores
relaciónales y lógicos. Todo lo que se requiere es que la expresión evaluada de cero o no cero.

Listado 2.1 texto completo de adivina.cpp


// adivina.cpp
#include <iostream>
#include <stdlib.h>
#include <time.h>

using namespace std;

void main(void) {
int n, pc;

srand( (unsigned)time( NULL ) );


pc = rand() % 5;
cout << "\nAdivina el numero que pienso (0-4) " << endl;
cin >> n;
if (n == pc)
cout << "Adivinaste!";
else
cout << endl << "Intenta otra vez";
}

2.2 Anidamiento de instrucciones


Listado 2.2 texto completo de mayor.cpp
// lea dos numeros y dice si son iguales o cual es el mayor
#include <iostream.h>

int main(){
int a, b;

cout << "\nDame un numero ";


cin >> a;
cout << "Dame otro numero ";
cin >> b;
if (a == b)
cout << "Los numero son igueles";
else
if (a > b)
cout << "El numero " << a << " es mayor que " << b;
else
cout << "El numero " << b << " es mayor que " << a;

return 0;
Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 8
}

2.3 Instrucciones de repetición


Iteracion do-while
Hace la comprobación al final después de cada pasada a través del cuerpo del ciclo. Y este se
ejecuta al menos una vez.

Forma general:
do
proposición;
while (condición);

Listado 2.3 texto completo de doadivina.cpp


// doadivina.cpp
#include <iostream>
#include <string>
#include <stdlib.h>
#include <time.h>

using namespace std;

int main(void) {
int n, pc;
char c, mc;

srand( (unsigned)time( NULL ) );


pc = rand() % 5;
do {
cout << "\nAdivina el numero que pienso (0-4) " << endl;
cin >> n;
if (n == pc)
cout << "ADIVINSATE!!!" << endl;
else
cout << "NO ES!!!" << endl;

cout << endl << "Intenta otra vez? (S/N)";


cin >> c;
mc = toupper(c);
} while (mc != 'N');
return 0;
}

Iteracion while
Forma general:
while (condición) proposición;

Listado 2.4 texto completo de ascii.cpp


// Programa : Ascii.cpp
// Descripcion: Despliega la tabla Ascii
#include<iostream.h>
const int ASCII=255;

int main() {
int i;

i = 0;
while (i < ASCII) {
// el caracter 26, puede borrar pantalla en DOS
cout << char(i) << " " << i << " ";
Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 9
i++;
}
return 0;
}

Iteración for
Forma general:
for (inicialización; condición; incremento)
proposición;

Listado 2.5 texto completo de for_prom.cpp


// for_prom.cpp
#include <iostream.h>

const TAM=5;
int main() {
int calif[TAM];
int suma, i;
float prom;

cout << "Dame 5 calificaciones " << endl;


suma = 0;
for (i = 0; i < TAM; i++) {
cout << "Calificacion " << i << " ? ";
cin >> calif[i];
suma = suma + calif[i];
}
prom = suma / TAM;
cout << endl << "El promedio es " << prom;
return 0;
}

La proposición for es equivalente a:


inicialización;
while (condición) {
proposición;
incremento;
}

2.3 Instrucciones de condicion (switch)


Sentencia switch
Herramienta especial para decisiones múltiples que comprueba si una expresión
iguala uno entre varios valores constantes, y se bifurca a partir de ellos.

Forma General:
switch (variable) {
case constante1:
secuencia de sentencias;
case constante2:
secuencia de sentencias;
break;
.
.
.
default:
secuencia de sentencias;
}

Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 10


1. El switch difiere del if porque la primera solo puede comprobar por igualdad, mientras que la
expresión condicional del if puede ser de cualquier tipo.
2. No pueden tener dos constantes case con idénticos valores en el mismo switch. Una sentencia
switch que esta encerrada por otro switch puede tener constantes case que son las mismas.

case
Actúa como una etiqueta.

break
Opcional dentro de la sentencia switch. Se usa para terminar la secuencia que esta asociada con
cada constante. Si se omite, la ejecución continuara en las sentencias del siguiente case hasta
encontrar un break, un return o el final del switch.

default
Es opcional y se ejecuta si no se satisface ninguna opción.

Listado 2.6 texto completo de fechaSwitch.cpp


#include <iostream.h>
#define LON 2
int main(){
int fecha[] = {1, 12, 2004}; // dd/mm/aa

cout << fecha[0] << " de ";


switch(fecha[1]) {
case 1:
cout << "enero";
break;
case 2:
cout << "febrero";
break;
case 3:
cout << "marzo";
break;
case 4:
cout << "abril";
break;
case 5:
cout << "mayo";
break;
case 6:
cout << "junio";
break;
case 7:
cout << "julio";
break;
case 8:
cout << "agosto";
break;
case 9:
cout << "septiembre";
break;
case 10:
cout << "octubre";
break;
case 11:
cout << "noviembre";
break;
case 12:
cout << "diciembre";
break;
Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 11
default:
out << " *error*";
}
cout << " del " << fecha[2];
return 0;
}

Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 12


3. Punteros y cadena de caracteres
3.1 Definición de Puntero
Un puntero es una variable que almacena una dirección de memoria. Esta dirección es usualmente la localidad de otra
variable en memoria. Si una variable contiene la dirección de otra variable, entonces se dice que la primera variable
apunta a la segunda.

MEMORIA
Área libre
Código del programa que esta en ejecución

Pasos a seguir al usar punteros


1. Define el puntero (Usando el *)
int *pn;
2. Inicializa el puntero para apuntar a algo (Usando &)
pn = &n;
3. Toma a lo que este apuntando el puntero (Usando *)
cout << “pn esta apuntando a “ << *pn;

Ejemplo:
int n, *pn;
n = 3;
pn = &n;
Direcciones en
memoria 1500 1501 1600 1601

Variables en 0 3 15 00
memoria

n *pn
La inicialización:
pn = &n
Se puede decir como: toma la dirección de la variable n y almacénala en la dirección de pn.

Indireccion
Es el proceso de accesar el contenido de una variable a través de una variable tipo puntero. Usando
el operador *

Ejemplo:
int n, *pn, x;
n = 3;
pn = &n;
x = *pn; ( x = 3)

El operador & solo se puede aplicar a variables y a elementos de un arreglo.


Son ilegales construcciones como:
&(x+1)
&3

Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 13


Listado 3.1 texto completo de apunta.cpp
#include <iostream.h>
int main() {
int actualint = 123;
int *apuntador_int;

cout << "\nValor de actualint " << actualint;


cout << "\nDireccion de actualint " << &actualint;
cout << "\nValor del puntero antes de asignacion " << apuntador_int;

apuntador_int = &actualint;
cout << "\n\nValor del puntero despues de asignacion " << apuntador_int;
cout << "\nValor de donde apunta el puntero " << *apuntador_int;

(*apuntador_int)++;
cout << "\n\nValor de actualint " << actualint;

actualint++;
cout << "\nValor de donde apunta el puntero " << *apuntador_int << endl;
}

3.2 Manejo dinámico de memoria


Operadores new y delete

new
Aloja memoria dinámicamente, regresa un apuntador a la memoria alojada. Si falla resulta una
excepcion bad_alloc. (Investigar manejo de excepciones)

delete
Desaloja un bloc de memoria dinámica que ha sido previamente alojado por el operador new. El
Desalojo de memoria la libera para reusamiento.

Listado 3.2 texto completo de asientos.cpp


#include <iostream.h>
#include <string>

using namespace std;


void main() {
int total_asientos, numero, i;
string *asiento;

cout << "\nCantidad de asientos con que cuenta el local? ";


cin >> total_asientos; // Toma la longitud del arreglo

asiento = new string[total_asientos]; // Aloja el arreglo

do {
for (i=0; i < total_asientos; i++)
cout << endl << "Asiento " << i << ": " << asiento[i];

cout << endl << "Numero de Asiento? ";


cin >> numero;
if (numero < 0)
break;
cout << "Nombre ";
cin >> asiento[numero];
} while(1);

delete []asiento;
}

Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 14


3.2 Cadenas de caracteres
Una cadena de caracteres consiste en un arreglo de caracteres terminado en un nulo. Un nulo se
especifica como '\0' y es cero.
Si se quiere definir un a cadena de 10 elementos se debe definir de 11 para soportar el carácter
nulo.

Ejemplo:
char str[11];

Una constante de cadena es una lista de caracteres que se encierran entre comillas.

Ejemplo:
"HOLA"

Al declarar una constante de cadena el compilador de C++ agregara automáticamente el carácter


nulo al final.

La cadena "HOLA" se vera en memoria así:


H O L A \0

Listado 3.3 texto completo de cadena.cpp


// Programa : cadena.cpp
// Descripcion: Cadenas de caracteres
#include<iostream>

using namespace std;

int main() {
char cStr[] = "notepad cadena.cpp";

cout << endl << "Ejecutandose " << cStr;


system(cStr);

cStr[7] = '\0';
cout << endl << "Ejecutandose " << cStr;
system(cStr);

return 0;
}

3.3 Argumentos en la linea de comandos


Es la informacion que sigue incluyendo el nombre del programa en la linea de comandos del
sistema operativo separada por espacios.

argc
Es el numero de argumentos en la linea de comandos del sistema operativo con que se invoco el
programa.

argv
Es un apuntador a un arreglo de cadenas de caracteres. Cada cadena contiene un argumento.

Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 15


Nota: argc siempre será 1 porque el primer argumento es el nombre del programa (algunos
sistemas operativos incluyen el path).

Listado 3.4 texto completo de ver_texto.cpp


#include <iostream.h>

int main(int argc, char *argv[]) {


char cStr[80];

if (argc < 2)
cout << "Uso: ver_texto archivo_de_texto\n";
else {
strcpy(cStr, "more /C "); // copia la cadena "more /C" a cStr
strcat(cStr, argv[1]); // concatena el contenido de cStr con argv[1]
system(cStr);
}

return 0;
}

3.4 Referencia
Listado 3.5 texto completo de referen1.cpp
#include <iostream.h>
main() {
int actualint = 123;
int &otroint = actualint;

cout << '\n' << actualint;


cout << '\n' << otroint;

otroint++;
cout << '\n' << actualint;
cout << '\n' << otroint;
actualint++;
cout << '\n' << actualint;
cout << '\n' << otroint;
}

Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 16


4 Modulos
4.1 Alcance de variables
Las variables declaradas dentro de un bloque de codigo son locales a ese bloque, no pueden ser
accesadas por otro bloque o afuera de este.

Variables automáticas, tambien llamadas locales dinamicas


Cada variable local comienza a existir cuando se executa el bloque donde fue declarada y
desaparece cuando el bloque de codigo acaba. Estas variables no conservan su valor entre dos
llamadas sucesivas. Notese que las funciones en si son bloques de codigo con un nombre asignado.

Listado 4.1 texto completo de bloques.cpp


1. #include <iostream.h>
2.
3. int a = 0;
4. int main() {
5. int a = 10;
6.
7. cout << a << endl;
8. cout << ::a << endl;
9. {
10. int x = 20;
11. cout << x << endl;
12. x++;
13. }
14. //cout << x;
15.}
La linea 14 esta como comentario porque marca un error, de variable no encontrada.
En la linea 8, se utiliza el operador de alcance ::

Variables externas, tambien llamadas globales


Se definen fuera de las funciones estas son externas a todas las funciones; esto es variables
globales a las que puede acceder cualquier función mediante su nombre.
Cuando son declaradas en otro archivo se debe usar la palabra reservada extern.

4.2 Funciones definidas por el usuario


Una función es un bloque de codigo con un nombre asignado, este código es privado a la función y
no puede ser acezado por ninguna declaración en ninguna otra función excepto a través de
argumentos y variables globales

Las variables definidas dentro de una función son variables locales dinámicas. (empiezan a existir
cuando la función es llamada y se destruyen al terminar).

Forma general:
especificador_tipo nombre_funcion(declaración de argumentos )
{
cuerpo de la función
}

El especificador_de_tipo especifica el tipo de valor que la función devolver mediante el return.

La lista_de_argumentos es una lista de nombres de variables separados por comas que recibe los
valores de los argumentos cuando se llama la función.
Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 17
Las funciones terminan y devuelven automáticamente al procedimiento que la llamo cuando se
encuentra la ultima llave o mediante la sentencia return.

Listado 4.2 texto completo de mayusculas.cpp


// Programa : mayusculas.cpp
// Convierte una cadena de caracteres a mayusculas
#include <iostream.h>

char mensaje[80];

void mayusculas(void) {
int i;
for (i = 0; mensaje[i] != '\0'; i++)
mensaje[i] = toupper(mensaje[i]);
}

int main() {
system("cls");
cout << "Ingresa un mensaje ";
cin.getline(mensaje, 79);

mayusculas();
cout << "\nEl mensaje en mayusculas es " << mensaje;

return 0;
}

4.3 Argumentos de funciones


Hay tres tipos de argumentos para las funciones
1. Por valor
2. Por puntero
3. Por referencia

Llamada por valor


Este método copia el valor del argumento dentro de los parametros formales de la función y todos los cambios que
sufran los parámetros no afectan el valor del argumento usado para llamar la función.Los parametros formales de
la función son las declaraciones de las variables que aceptan los valores de los argumentos.

Listado 4.3 texto completo de sqr.cpp


// Programa : SQR.CPP
// Descripcion: Usa una funcion que recibe y regresa un valor entero
#include <iostream.h>
int sqr(int num) {
num = num * num;

return num;
}
main() {
int n, x;

cout << "Ingresa un numero ";


cin >> n;
x = sqr(n);
cout << endl << "El cuadrado de " << n << " es " << x;
}

Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 18


Llamada por apuntadores
En este método, la dirección en memoria del argumento es copiada dentro del parametro de la
función, la dirección es usada para accesar el valor en memoria de la variable usada en la llamada.
Para usar este método pasamos un apuntador de el argumento. Los apuntadores son pasados a la
función como cualquier otro valor pero declarando los parámetros como del tipo apuntador.

Listado 4.4 texto completo de cambia.cpp


// Programa...: cambia.cpp
// Descripcion: intercambia dos numeros con una funcion
#include <iostream.h>

void cambia(int *x, int *y);

int main(void) {
int x = 20, y = 10;

cambia(&x, &y);
cout << endl << x << " " << y;
return 0;
}

void cambia(int *x, int *y) {


int paso;

paso = *x;
*x = *y;
*y = paso;
}

Llamada por referencia


Listado 4.5 texto completo de cambiarf.cpp
// Prog: CambiaRf.Cpp
// Desc: Usa una funcion que intercambia los valores de sus argumentos
// utilizando paso por Referencia
#include <iostream.h>

void cambia(int &a, int &b) {


int paso;

paso = a;
a = b;
b = paso;
}

main() {
int x, y;

x = 10; y = 20;
cambia(x, y);
cout << endl << "X = " << x;
cout << endl << "Y = " << y;
}

4.4 Modulos

Listado 4.6 texto completo de tiempo.h


#ifndef TIEMPO_H
#define TIEMPO_H

#include <string>

Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 19


using namespace std;

void horaActual(string &sHora); // paso por referencia


void fechaActual(string &sFecha); // paso por referencia
// se espera cFechaCorta como: dd/mm/aa
void fechaLargaActual(string &sFechaLarga);

#endif // TIEMPO_H

Listado 4.7 texto completo de tiempo.cpp


#include <time.h>
#include "tiempo.h"

using namespace std;

void horaActual(string &sHora) { // paso por referencia


char cString[25];
time_t timer;
struct tm *tblock;

timer = time(NULL); // lee la fecha/hora

// convierte la fecha/hora a una estructura


tblock = localtime(&timer);

itoa(tblock->tm_hour, cString, 10);


sHora = cString;
sHora = sHora + ":";
itoa(tblock->tm_min, cString, 10);
sHora = sHora + cString + ":";
itoa(tblock->tm_sec, cString, 10);
sHora = sHora + cString;
}

void fechaActual(string &sFecha) { // paso por referencia


char cString[25];
time_t timer;
struct tm *tblock;

timer = time(NULL); // lee la fecha/hora

// convierte la fecha/hora a una estructura


tblock = localtime(&timer);

itoa(tblock->tm_mday, cString, 10);


sFecha = cString;
sFecha = sFecha + "/";
itoa(tblock->tm_mon + 1, cString, 10);
sFecha = sFecha + cString + "/";
itoa(tblock->tm_year-100, cString, 10);
sFecha = sFecha + cString;
}

// se espera cFechaCorta como: dd/mm/aa


void fechaLargaActual(string &sFechaLarga){
char *meses[] = {"Enero", "febrero", "Marzo", "Abril", "Mayo", "Junio",
"Julio", "Agosto", "Septiembre", "Octubre", "Noviembre",
"Diciembre"};
int iTemp;
string sFecha;

fechaActual(sFecha);
Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 20
sFechaLarga = sFecha.substr(0, 2); // dia

iTemp = atoi(sFecha.substr(3, 2).data()); // mes


sFechaLarga = sFechaLarga + " de " + meses[iTemp-1];

iTemp = atoi(sFecha.substr(6, 2).data());


if (iTemp < 10)
sFechaLarga = sFechaLarga + " del 200" + sFecha.substr(6, 2);
else
sFechaLarga = sFechaLarga + " del 20" + sFecha.substr(6, 2);
}

Listado 4.8 texto completo de testTiempo.cpp


#include <iostream>
#include <string>
#include "tiempo.h"

using namespace std;

int main(void) {
string sStr;

horaActual(sStr);
cout << sStr << endl;

fechaActual(sStr);
cout << sStr << endl;

fechaLargaActual(sStr);
cout << sStr << endl;
return 0;
}

Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 21


5 Estructuras y clases
5.1 Estructuras
Una estructura es un conjunto de una o mas variables, posiblemente de tipos, diferentes, agrupadas
bajo un mismo nombre.

Forma general:
struct etiqueta {
tipo nombre_variable;
tipo nombre_variable;
.
.
tipo nombre_variable;
} variables_de_estructura;

Referenciando los elementos de la estructura:


nombre_estructura.nombre_elemento

Listado 5.1 texto completo de structFecha.cpp


// Programa : structFecha.cpp
// Descripcion: Estructuras
#include <iostream>
#include <string>

using namespace std;

struct Fecha {
int dd;
string mm;
int aa;
};

int main() {
Fecha fecha;

cout << "Dia ";


cin >> fecha.dd;
cout << "\nMes en letra ";
cin >> fecha.mm;
cout << "\nA#o ";
cin >> fecha.aa;

cout << "\n\n" << fecha.dd << " de " << fecha.mm << " de " << fecha.aa;

return 0;
}

5.2 Clases (class)


Una clase es un metodo logico de organizar datos y funciones en una misma estructura. Se declara
usando la la palabra reservada class, la funcionalidad es similar a la palabra reservada struct, pero
con la posibilidad de incluir funciones ademas de datos.

forma:

class nombre_de_la_clase {
etiqueta_de_nivel_de_permiso_1:
Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 22
miembros1;
etiqueta_de_nivel_de_permiso_2:
miembros2;
...
} nombre_del_objeto;

Control de acceso de los miembros del objeto


private
Los miembros que le siguen a esta palabra reservada solo pueden ser accesados por las funciones
miembro declaradas dentro de la misma clase.

protected
Los miembros que le siguen a esta palabra reservada solo pueden ser accesados por las funciones
miembro dentro de la misma clase, y por las funciones miembro de las clases que son derivadas de
esta clase.

public
Los miembros que le siguen a esta palabra reservada pueden ser accesados en cualquier lugar
dentro del alcance de la clase.

Listado 5.2 texto completo de caracter.cpp


#include <iostream.h>

class CCaracter {
private:
char c;
public:
// funciones constructor
CCaracter();
CCaracter(char ac);
~CCaracter() {
cout << "\nGood bye, cruel world! " << c;
}
// funciones miembro
void yoSoy(void) { cout << "\nYo soy " << c; }
void apariencia(char ac);
};

CCaracter::CCaracter() {
c = '@';
cout << "\nConstructor CCaracter(): " << c;
}

CCaracter::CCaracter(char ac) {
c = ac;
cout << "\nConstructor CCaracter(char ac): " << c;
}

void CCaracter::apariencia(char ac) {


c = ac;
}

void main(){
CCaracter c1; // Declara un caracter sin inicializadores
CCaracter c2('#'); // Declara un caracter

cout << "\n\n";


c1.yoSoy();
c2.yoSoy();

Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 23


cout << "\n\n";
c1.apariencia('*');
c1.yoSoy();
cout << "\nFin del programa\n";
}

Listado 5.3 texto completo de cfecha.h


#ifndef CFECHA_H
#define CFECHA_H

class CFecha {
private:
int mm, dd, aa;
public:
CFecha(int a_dd, int a_mm, int a_aa) {
mm = a_mm;
dd = a_dd;
aa = a_aa;
}
CFecha(); // Funcion de conversion constructor
void display(void);
void fullDisplay();
};

#endif // CFECHA_H

Listado 5.4 texto completo de cfecha.cpp


#include "cfecha.h"
#include <iostream.h>
#include <time.h>

// ----- Miembro de fecha para deplegarla


void CFecha::display() {
cout << dd << '/' << mm << '/'<< aa;
}

void CFecha::fullDisplay() {
char *meses[] = {"Enero", "febrero", "Marzo", "Abril", "Mayo", "Junio",
"Julio", "Agosto", "Septiembre", "Octubre", "Noviembre",
"Diciembre"};

cout << dd << " de " << meses[mm-1] << " del " << (2000 + aa);
}

// ----- Funcion de conversion constructor


CFecha::CFecha(){
time_t ahora = time(NULL); // Hora y fecha de hoy
struct tm *tiempo = localtime(&ahora);
dd = tiempo->tm_mday;
mm = tiempo->tm_mon + 1;
aa = tiempo->tm_year - 100;
}

Listado 5.5 texto completo de testcfecha.cpp


#include <iostream.h>
#include "cfecha.h"

int main(void) {
CFecha f1; // Invoca la conversion de constructor
Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 24
CFecha f2(24, 12, 03);

f1.display();
cout << "\n";
f2.fullDisplay();
}

Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 25


6 Archivos
6.1 Corrientes de Flujo
Corrientes y archivos
El sistema de E/S de C++ proporciona una interfaz independiente del dispositivo real al que se
accede; esto es, una abstracción entre el programador y el dispositivo que se usa. Esta abstracción
se llama corriente y el dispositivo real se llama archivo.

Corrientes
Almacenamiento temporal de archivo para transformar los dispositivos físicos en un
almacenamiento lógico. Esto permite que las corrientes sean independientes de los dispositivos.
Existen dos tipos de corrientes: texto y binarias.

Corrientes de texto
Secuencia de caracteres organizadas en lineas terminadas por un carácter nueva linea. La
traducción del carácter nueva linea depende de la implementacion.

6.2 Archivos
Para utilizar archivos es necesario incluir el archivo fstream.h, (#include <fstream.h>) al incluir
este archivo de encabezado ya no es necesario incluir el iostream.h si utiliza cin/cout, por que el
fstream.h lo inluye automaticamente.
En este archivo estan definidas varias clases, incluyendo ifstream – flujo de entrada, ofstream –
flujo de salida, y fstream – flujo de entrada y salida.

Listado 6.1 texto completo de encripta.cpp


// Programa : encripta.cpp
//#include <iostream.h>
#include <fstream.h>
#include <stdlib.h> // exit()
#include <ctype.h>

int main(int argc, char *argv[]) {


char c;

if (argc < 3) {
cout << "Uso: encripta archivo_fuente archivo_destino [-d]\n";
cout << "\t[-d] desencripta\n";
exit(1);
}
fstream entrada(argv[1], ios::in); // | ios::out); para e/s
fstream salida(argv[2], ios::out);

if (entrada.fail()) { // tambien-> if (!entrada)


cout << "Error al abrir archivo! Abortando";
exit(1);
}
if (salida.fail()) {
cout << "Error al abrir archivo! Abortando";
exit(1);
}
while (!entrada.eof()){
entrada.get(c);
if (argc == 3) // si no tiene 4 parametros es encriptacion ;)
salida.put(c-1); // encripta
else
salida.put(c+1); // desencripta
}
Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 26
entrada.close();
salida.close();

return 0;
}

Para abrir un archivo para entrada y salida usar:


fstream archivo(“nombre_archivo.txt”, ios::in | ios::out);

Listado 6.2 texto completo de texto_a_html.cpp


// texto_a_html.cpp
// Descripcion: formatea un archivo de texto a html

#include <fstream.h>
#include <stdlib.h> // exit()
#include <ctype.h>

int main(int argc, char *argv[]) {


char c;

if (argc < 3) {
cout << "Uso: texto_a_html archivo_texto archivo_html\n";
exit(1);
}
fstream entrada(argv[1], ios::in); // | ios::out); para e/s
fstream salida(argv[2], ios::out);

if (entrada.fail()) { // tambien-> if (!entrada)


cout << "Error al abrir archivo! Abortando";
exit(1);
}
if (salida.fail()) {
cout << "Error al abrir archivo! Abortando";
exit(1);
}
salida << "<HTML><BODY>";
salida << "<H3>" << argv[1] << "</H3>\n";
salida << "<PLAINTEXT>\n";
while (!entrada.eof()) {
entrada.get(c);
salida.put(c);
}
salida << "</PLAINTEXT>\n";
salida << "</BODY></HTML>";

entrada.close();
salida.close();

return 0;
}

Para posicionarse en una parte del archivo se usa la funcion miembro seekg
por ejemplo:
archivo.seeekg(0, ios::end); // se posiciona exactamente al final del
archivo
archivo.seeekg(10, ios::beg); //se posiciona 10 caracteres despues del
inicio

Para archivos binarios (no formateados, para manejar byte por byte), se usa el modificador
ios::binary al abrir el archivo y no se usan los operadores <<, >>

Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 27


Bibliografia

● [Stroustrup 1993] Bjarne Stroustrup: “El lenguaje de programación C++” Segunda Edición Addison-
Wesley/Diaz de Santos 1993

● [Eckel 1993] Bruce Eckel: “C++ Inside & Out” Osborne McGraw-Hill 1993

● [Kernighan 1991] Brian W. Kernighan y Dennis M. Ritchie: “El lenguaje de programación C”


segunda edición Prentice Hall 1991

● [Schildt 1990] Herlbert Schildt: “C The Complete Reference” second edition Osborne McGraw-Hill
1990

● [Rodriguez 2004] Cesar Rodriguez: “Tutorial de Lenguaje C”, http://cesar.crbyte.com, 2004

Tutorial rapido de C++ Rogelio Cesar Rodríguez Cervantes 28

Vous aimerez peut-être aussi