introduccion a c++

43
C++ Curso Básico A menor que B A mayor que B A>B A, B Final Inicio A mayor que B

Upload: lenhugo

Post on 24-Jul-2015

123 views

Category:

Documents


1 download

TRANSCRIPT

C++Curso Básico

A menor que B

A mayor que B

A>B

A, B

Final

Inicio

A mayor que B

Prerrequisitos

Manejo Básico de Sistemas Operativos

Curso de metodología de la programación

Introducción a la programación en C++

El lenguaje C fue inventado e implementado por primera vez por Dennis Ritchie en un DEC PDP-11 en los laboratorios Bell. Inicialmente C se hizo popular como lenguaje de desarrollo para el sistema operativo UNIX. En la actualidad la mayoría de los sistemas operativos están escritos en C y/o C++.

C++ es un lenguaje mejorado, desarrollado por Bjarne Stroustrup en los labora torios Bell. C++ proporciona un conjunto de características que pulen al lenguaje C; sin embargo, lo mas importante es que proporciona capacidades para una programación orientada a objetos.

Concepto de Memoria: Los nombres de variable tales como entero1, entero2 y suma en realidad corresponden a lugares en la memoria de la computadora. Toda variable tiene un nombre, un tipo y un valor. Ejemplo:

Int entero1;Int entero2;Int suma;

Operadores Aritméticos en C

Suma +

Resta -

Multiplicación *

División /

Modulo %

Toma de Decisiones: Operadores de igualad y de Relación.

== Igual que

!= No es igual que

> Mayor que

< Menor que

>= Mayor o igual que

<= Menor o igual que

Palabras reservadas.

If For Static Extern

Else Double Enum Signed

Case Break Case Static

Char Switch Float Return

Const Void Goto Struct

do While Sizeof Union

Ejemplo:

/* Mi primer programa*/# include <stdio.h> /* la función main inicia la ejecución del programa*/

int main() { printf(“Bienvenido a C!\n”); return 0; /* Indica que el programa termino con éxito*/

} /*Fin del programa*/

/* */ -indican comentarios.

# include <stdio.h> directiva del preprocesador de C. son procesadas por el preprocesador antes de que el programa se compile.

Int main() todo programa en C comienza su ejecución en la función main.

{ inicia el cuerpo de cada función.

} finaliza cada función.

Return 0 indica que el programa termino con éxito.

Estructuras de control• Estructura Secuencial la computadora ejecuta de manera automática las instrucciones en C, una a una,

en el orden en el orden en que están escritas. Ejemplo:

Programa de suma */#include <stdio.h>

/* la función main inicia la ejecución del programa */int main(){ int entero1; /* primer número introducido por el usuario */ int entero2; /* segundo número introducido por el usuario */ int suma; /* variable en la cual se almacena la suma */

printf( "Introduzca el primer entero\n" ); /* indicador */ scanf( "%d", &entero1 ); /* lee un entero */

printf( "Introduzca el segundo entero\n" ); /* indicador */ scanf( "%d", &entero2 ); /* lee un entero */

suma = entero1 + entero2; /* asigna el total a suma */

printf( "La suma es %d\n", suma ); /* imprime la suma */

return 0; /* indica que el programa terminó con éxito */

} /* fin de la función main */

• Estructura de Selección C proporciona tres tipos : La instrucción If (simple): realiza una acción si la condición es verdadera, o

ignora la acción si la condición es falsa. Ejemplo if (Nota >=60) printf(“Aprobado\n”);

La instrucción if …. Else (doble): realiza una acción si la condición es verdadera y realiza una acción diferente si la condición es falsa. if (Nota >=60) printf(“Aprobado\n”); else printf(“Reprobado\n”);

La instrucción Switch(múltiple):realiza una de muchas acciones dependiendo del valor de una expresión.

Switch (Nota) { case ‘A’: printf(“Aprobado”); break; /* fin de Switch*/ case ‘B’: printf(“Muy bueno”); break; /* fin de Switch*/ case ‘C’: printf(“Bueno”); break; /* fin de Switch*/ case ‘D’: printf(“Insuficiente”); break; /* fin de Switch*/}

•Estructura de Repetición: C proporciona tres tipos de estructuras de de repetición en forma de instrucciones. While Do….While For

Instrucción de repetición While: permite especificar que una acción se va a repetir mientras una condición sea verdadera. La ejecución del programa continua con la siguiente instrucción después del While. La condición se evalúa al principio del ciclo antes de que el cuerpo de este se ejecute.

producto=2; While (producto<=500) producto=2*producto;

Repetición controlada por contador: esta técnica utiliza una variable llamada contador para especificar el numero de veces que se ejecuta un conjunto de instrucciones.

While (contador<=10) { printf(“Introduzca calificación:”); scanf(“%d”, &calificación); total= total+ calificación; contador=contador+1;}

Repetición controlada por centinela: también llamado valor de bandera. Indica el fin de la entrada de datos.

While (calificación != -1) { total= total+ calificación; contador=contador+1; printf(“Introduzca calificación, -1 para terminar:”); scanf(“%d”, &calificación);}

Instrucción de repetición For: la instrucción For maneja todos los detalles de la repetición controlada por contador. La forma general es:

For(expresion1; expresion2; expresion3) instruccionesEjemploFor (contador=1; contador<=10; contador++) { printf(“%d\n”, contador); }

Instrucción de repetición Do…While: es parecida a la instrucción While con la diferencia de que do…While evalúa la condición de continuación del ciclo después de que el cuerpo de este se ejecute. Por lo tanto el cuerpo del ciclo se ejecutara al menos una vez. ejemplo

Do { printf (“%d ”, contador); } While (++contador <=10);

Funciones

Permiten a los usuarios dividir un programa en módulos.Todas las variables que se definen en una función son variables locales, es decir, se conocen solamente en la función en la que se definen. La mayoría de las funciones tienen una lista de parámetros. Los parámetros proporcionan los medios para transferir información entre fusiones. Los parámetros de una función también son variables locales de dicha función.

Formato de una definición de función:

Tipo-valor-retorno nombre - función ( lista parámetros) { definiciones instrucciones }

Llamada a funciones(Por Valor y por Referencia): cuando los argumentos se pasan por valor, se crea una copia del argumento y se pasa y se pasa a la función que se invoco. Los cambios hechos a la copia no afectan el valor original de la variable dentro de la función que hace la llamada. Cuando el argumento se pasa por referencia la función que hace la llamada en realidad permite a la función llamada modificar el valor original de la variable.

Int máximo(int x, int y, int z){ int Max=x; if (y>Max){ Max=y; } if (z>Max){ Max=z; } return Max;}

Arreglos

Un arreglo es un grupo consecutivo de localidades de memoria relacionadas por el hecho de que tienen el mismo nombre y tipo. Para hacer referencia a un elemento del arreglo en particular, especificamos el nombre del arreglo y la posición numérica del elemento en particular dentro del arreglo.

2

5

8

6

3

45

10

12

A [0]

A [1]

A [2]

A [3]

A [4]

A [5]

A [6]

A [7]

Nombre del arreglo

Posición Numérica en el arreglo

Declaración de arreglos:Los arreglos ocupan espacio en memoria por tanto por lo tanto se especifica el tipo de cada arreglo y el numero de elementos que necesita el arreglo, de manera que la computadora pueda reservar la cantidad adecuada de memoria. Ejemplo: Int A[8];

Inicializar un arreglo */#include <stdio.h>

/* la función main inicia la ejecución del programa */int main(){ int n[10]; int i; For (i=0; i<10; i++) { n[i]=0 } printf( “%s%13s\n“, “Elemento”, “”Valor );

For (i=0; i<10; i++){ printf( “%7d%13d\n“, i, n[i] ); return 0; /* indica que el programa terminó con éxito */

} /* fin de la función main */

Ordenamiento de Arreglos: El ordenamiento de datos es una de las aplicaciones de computo mas importantes. Esto puede ser de forma ascendente o descendente. A continuación se mostrara una técnica conocida como ordenamiento burbuja o hundimiento ya que los valores mas pequeños flotan gradualmente hacia arriba, hacia el encabezado del arreglo mientras que los valores mas grandes se hunden en el fondo del arreglo. Ejemplo:

/* Ciclo para controlar el numero de pasos*/

For (pasadas=1; pasadas<tamaño; pasadas++) { /* Ciclo para controlar el numero de comparaciones por paso*/

For (i=0; i<tamaño-1; i++) { /* compara los elementos adyacentes y los intercambia si el primer

elemento es mayor que el segundo*/

if (a[i]>a[i+1]) { almacena=a[i]; a[i]=a[i+1]; a[i+1]=almacena; } } }

Búsqueda en Arreglos: Al proceso de encontrar un elemento en particular de un arreglo se le conoce como búsqueda. A continuación mostraremos dos técnicas de búsqueda:

Búsqueda Lineal: compara cada elemento de un arreglo con la clave de búsqueda. Ejemplo:

/* Ciclo a través del arreglo*/

For (n=0; n<tamaño; n++) {

if (arreglo[n]==llave){ return n; /* devuelve la ubicación de la llave*/

}

} return -1; /*llave no encontrada*/

}

Búsqueda Binaria: Si el arreglo se encuentra ordenado, se puede utilizar la técnica de búsqueda binaria. Después de cada comparación el algoritmo elimina la mitad de los elementos del arreglo ordenado en el que se busca. El algoritmo localiza el elemento central de un arreglo y lo compara con la clave de búsqueda. Si son iguales, entonces localizo la clave de búsqueda y devuelve el subíndice del elemento del arreglo. De lo contrario, el problema se reduce a buscar en una mitad del arreglo. Si la clave de búsqueda es menor que el elemento central del arreglo, la búsqueda se realiza en la primera mitad de este; de lo contrario la búsqueda se realiza en la segunda mitad. Si el elemento no se encuentra en el subarreglo especificado, el algoritmo se repite en un cuarto del arreglo original. La búsqueda continua hasta que la clave de búsqueda es igual al elemento de un subarreglo, o hasta que el subarreglo consista en un elemento que no sea igual a la clave de búsqueda.

While (bajo<=alto){ central=(bajo+alto)/2; if (ClavedeBusqueda==b[central]){

return central; /* devuelve la ubicación de la llave*/

} else if (ClavedeBusqueda<b[central]){ alto=central-1 } else{ bajo=central+1; } } return -1; /*llave no encontrada*/}

Apuntadores

Los apuntadores son variable cuyos valores son direcciones de memoria. Por lo general, una variable contiene un valor especifico. Por otro lado un apuntador contiene la dirección de una variable que contiene un valor especifico. Al proceso de referenciar a un valor a través de un apuntador se le llama indireccion.Los apuntadores deben definirse antes de que se puedan utilizar.

Int *ptrCuenta /*Apuntador de tipo entero*/

Esto se lee ptrCuenta apunta a un objeto de tipo int.El asterisco solo se aplica la variable que se define como apuntador.Los apuntadores pueden definirse para apuntar a objetos de cualquier tipo de dato.Los apuntadores deben inicializarse en el momento en que se definen o en una instrucción de asignación. Un apuntador puede inicializarse en 0, NULL o en una dirección.

Operadores para apuntadores: El &, u operador de dirección, es un operador unario que devuelve la dirección de su operando. El operador *, por lo general llamado operador de indireccion u operador de desreferencia, devuelve el valor del objeto al que apunta su operando.

Int main(){ int a; int *ptrA; a=7; ptrA=&a; printf(“La dirección de a es %p” “\nEl valor de ptrA es %p”, &a, ptrA);

printf(“\n\nEl valor de a es %d” “\nEl valor de ptrA es %d”, a, *ptrA);

printf(“\n\nMuestra de que * y & son complementos” “uno del otro\n&*ptrA=%p” “\n*&prtA=%p\n”, &*ptrA, *&ptrA); return 0;}

Clases++ es una mejoría sobre muchas de las características de C, y proporcionacapacidades de P.O.O. que promete mucho para incrementar la productividad, calidad yreutilización del software.

En C, la unidad de programación es la función, con lo cual, se trata de una programación orientada a la acción.

En C++, la unidad de programación es la clase a partir de la cual, los objetos sonproducidos. Se trata, pues, de una programación orientada al objeto.

C++ permite un tratamiento común de entradas/salidas de tipos definidos por usuario.Este tipo de estado común facilita el desarrollo de software en general y de lareutilización de software en particular.La salida de flujo puede ser ejecutada mediante el operador de inserción de flujo : <<.Se hace la homonimia del operador << para extraer elementos de datos de tiposincorporados, para extraer cadenas y para extraer valores de apuntadores.C

Ejemplo:

// Programa que muestra mensaje de bienvenida a C++.// Salida de una cadena usando inserción de flujo.# include <iostream.h>main( ){cout <<''¡ Bienvenido a C++! \n'';return 0;}

Todas las palabras claves de C++ están en minúsculas. En C++, las mayúsculas yminúsculas son diferentes.

C++ COMO UN ''C MEJORADO''

COMENTARIOS Y DECLARACIONES EN C++C++ permite empezar un comentario con // y usar el resto de la línea para texto del comentario;El fin de la línea da de manera automática por terminado el comentario.

También es aceptable la forma de C : /* */.En C++, a diferencia de C, las declaraciones pueden ser colocadas en cualquier parte de un enunciado ejecutable, siempre y cuando las declaraciones antecedan el uso de lo que se está declarando. También, las variables pueden ser declaradas en la sección de inicialización de una estructura for; dichas variables se mantienen en alcance hasta el final del bloque en el cual la estructura for está definida.El alcance de una variable local C++ empieza en su declaración y se extiende hasta la llave derecha de cierre. Las declaraciones de variables no pueden ser colocadas en la condición de una estructura while, do/while, for o if.

FLUJO DE ENTRADA/SALIDA DE C++

C++ ofrece una alternativa a las llamadas de función printf y scanf para manejar la entrada/salida de los tipos y cadenas de datos estándar. Así, en lugar de printf usamos el flujo estándar de salida cout y el operador << (''colocar en''); y en lugar de scanfusamos el flujo de entrada estándar cin y el operador >> (''obtener de''). Estos operadores de inserción y extracción de flujo, a diferencia de printf y scanf, norequieren de cadenas de formato y de especificadores de conversión para indicar los tipos de datos que son extraídos o introducidos.Para utilizar entradas/salidas de flujo, se debe incluir el archivo de cabecera iostream.h.

COMO CREAR NUEVOS TIPOS DE DATOS EN C++C++ proporciona la capacidad de crear tipos definidos por el usuario mediante el uso de las palabras reservadas enum, Struct, unión y la nueva palabra reservada class. A diferencia de C, una enumeración ( enum ) en C++, cuando se declara, se convierte en un tipo nuevo. Para declarar la variable del nuevo tipo, la palabra reservada enum no es requerida. Lo mismo para Struct, unión y class. Los nombres de etiqueta pueden ser utilizados para declarar variables. Las enumeraciones por omisión son evaluadas iniciándose en cero.

ASIGNACION DINAMICA DE MEMORIA MEDIANTE NEW Y DELETEEn C++, el enunciado ptr = new typeName;asigna memoria para un objeto del tipo typeName. El operador new crea automáticamente un objeto del tamaño apropiado, y regresa un apuntador (ptr)del tipo apropiado. Si mediante new no se puede asignar memoria, se regresa un apuntador nulo. Para liberar el espacio para este objeto se usa delete ptr; El operador delete sólo puede ser utilizado para desasignar memoria ya asignadamediante el operando new.

PRIMERAS EXTENSIONES ORIENTADAS A OBJETOSCOMO PONER EN PRACTICA UN TDA CON UNA CLASELas clases permiten que el programador modele objetos que tienen atributos (miembros de datos) y comportamientos u operaciones (funciones miembro). Los tipos contienen miembros de datos y funciones miembro, y son definidos mediante la palabra reservada class.El nombre de la clase (una vez definida) puede ser utilizado para declarar objetos de dicha clase.

Ejemplo:class Punto // Declaración de la clase Punto.{int _x, _y; // Coordenadas del punto.public: // Principio de la declaración de interface.void setX (const int val);void setY (const int val);int getX( ) {return _x;}int getY( ) {return _y;}};Punto apunto; // Definición del objeto apunto.

La definición de una clase comienza con la palabra reservada class . El cuerpo de la definición de clase se delimita mediante llaves. La definición de clase termina con un punto y coma. En el cuerpo de la definición existen partes nuevas: la etiqueta public: yprivate: se conocen como especificadores de acceso de miembro. Cualquier miembro de datos o función miembro declarado después del especificador de acceso de miembro public: (y antes del siguiente especificador de acceso de miembro) es accesible, siempre que el programa tenga acceso a un objeto de la clase. Cualquier miembro de datos o función miembro declarada después del especificador de acceso de miembroprivate: (y hasta el siguiente especificador de acceso de miembro) sólo es accesible a las funciones miembro de la clase.

ALCANCE DE CLASE Y ACCESO A MIEMBROS DE CLASE

Los nombres de variables y los de función declarados en una definición de clase, y los nombres de datos y funciones miembro de una clase, pertenecen al alcance de dicha clase.Dentro del alcance de clase, los miembros de clase son accesibles por todas las funciones miembro de dicha clase y pueden ser referenciados sólo por su nombre. Fuera del alcance de una clase, los miembros de clase se referencian, ya sea a través delnombre del objeto, una referencia a un objeto, o un apuntador a un objeto.

COMO CONTROLAR EL ACCESO A MIEMBROSSe puede tener acceso a los miembros de clase privado sólo por miembros (y amigos) de dicha clase. Se puede tener acceso a los miembros públicos de una clase mediante cualquier función del programa.El cliente de una clase puede ser una función miembro de otra clase, o puede ser una función global.Los miembros de clase públicos presentan una vista de los servicios que proporciona la clase.Para miembros de una clase, el acceso por omisión es privado. El acceso a los datos privados de una clase puede ser controlado con cuidado medianteel uso de las funciones miembro conocidas como funciones de acceso. Si una clase desea permitir que los clientes lean datos privados, la clase puede proporcionar una función ''get''. Para permitir que los clientes modifiquen datos privados, la clase puede proveer una función ''set''.

COMO INICIALIZAR OBJETOS DE CLASE : CONSTRUCTORES

Los constructores son métodos que se usan para inicializar un objeto al momento de su definición o para asignar almacenamiento en memoria. Cuando se declara un objeto de una clase, se pueden dar inicializadores en paréntesis a la derecha del nombre del objeto y antes del punto y coma. Estos inicializadores son pasados como argumentos al constructor de la clase.Los constructores pueden tener argumentos por omisión.Si para una clase no se define ningún constructor, el compilador creará un constructor por omisión. Dicho constructor no ejecutará ninguna inicialización.Debemos incluir siempre un constructor que ejecute la inicialización adecuada para su clase.

Ejemplo:

class Punto{int _x, _y;public :Punto( ){_x = _y = 0;}void SetX( const int val );void SetY( const int val );int getX { return _x; }int getY { return _y; }};

Los constructores tienen el mismo nombre de la clase. No regresan ningún valor. Pueden llevar argumentos. Así:

class Punto{int _x, _y;public:Punto(){_x = _y = 0;}

// Continuamos con el ejemplo:Punto (const int x, const int y){_x = x; // Para poder inicializar un punto en_y = y; // otras coordenadas que no sean (0,0).}void setX (const int val);void setY (const int val);int getX() { return _x;}int getY() { return _y;}};Los constructores son llamados implícitamente cuando definimos objetos de susclases:Punto apunto; // Punto :: Punto()Punto bpunto(12,34); // Punto :: Punto(const int, const int)

DESTRUCTORES

Un destructor de clase es llamado automáticamente cuando un objeto de una clase se sale de alcance: debemos asegurarnos de que la memoria asignada sea liberada. Este método especial llamado destructor es llamado una vez por cada objeto en elmomento de su destrucción. Un destructor no recibe parámetros ni regresa ningún valor. Una clase sólo puede tener

un destructor: la homonimia de destructores no está permitida.

La destrucción de los objetos tiene lugar cuando el objeto abandona su ámbito de definición o es explícitamente destruido. Esto último sucede cuando nosotros dinámicamente asignamos un objeto y lo liberamos cuando ya no nos es necesario. Los destructores se declaran con el nombre de la clase prefijado con una tilde ( ~ ):

class Punto{int _x, _y;public:Punto(){_x = _y = 0;}// Continuamos con el ejemplo:Punto (const int x, const int y){_x = xval;_y = yval;}Punto (const Punto &desde){_x = desde._x;_y = desde._y;}~ Punto() { /* ¡Nada que hacer! */}void setX(const int val);void setY(const int val);int getX() {return _x;}int getY() {return _y;}};

CUANDO SON LLAMADOS LOS DESTRUCTORES Y CONSTRUCTORES

Por lo regular, son llamados de forma automática. En general, las llamadas de destructor se efectúan en orden inverso a las llamadas de constructor.

ANEXOS

Instalación del editor y compilador de código C/C++ Dev-C++

• Ejecutar el programa (“devcpp-4.9.9.2_ setup.exe”) haciendo doble-clic sobre él.

• Nos preguntará el idioma, y lógicamente

elegiremos “Español”. Aceptaremos todas las demás opciones con los valores predeterminados hasta que finalice la instalación.

• En la primera ejecución del programa, debemos seleccionar de nuevo el idioma, eligiendo “Español (Castellano)” y “XP Theme:

•Luego pulsamos “Next” tres veces para ir aceptando las opciones por defecto de las siguientes ventanas. Tras unos segundos, finalmente aparece el entorno de la aplicación correctamente instalada y configurada.

Vamos a crear nuestro primer programa, para ello: pulsaremos en el menú “Archivo”, y luego en “Nuevo – Código Fuente”.

Se abre un documento en blanco llamado “SinNombre1”. Lo guardaremos pulsando en “Archivo – Guardar Como…”. Vemos que intenta guardarlo en “C:\Dev-Cpp” con el nombre “SinNombre1”, así que lo cambiaremos: pondremos como nombre “hola.c” y como tipo “C source files (*.c)”. Finalmente, pulsamos “Guardar”. En el documento abierto (que hemos llamado “hola.c”) escribimos lo siguiente:

Ese es el código fuente de nuestro primer programa en lenguaje C. El código fuente será el archivo llamado “hola.c”, y el programa ejecutable resultado que construiremos inmediatamente se llamará “hola.exe”. Para construir el programa ejecutable, pulsaremos en el menú “Ejecutar” y en la opción “Compilar y Ejecutar”. Con esto, conseguimos que el compilador revise nuestro código fuente, y, si está bien escrito, creará un nuevo archivo en la misma carpeta donde está el archivo con el código fuente que será el ejecutable resultado que hace lo que tiene programado el código fuente.

Vemos que se ha ejecutado un archivo que está en “C:\Dev-Cpp” llamado “hola.exe” (recién creado), y simplemente abre una ventana de consola y muestra el texto “hola”, además muestra otro texto que pide que se pulse cualquier tecla para que se cierre la ventana.