Este documento presenta una introducción al lenguaje de programación C++. Comienza explicando que C++ es un lenguaje mejorado de C que agrega características de programación orientada a objetos. Luego describe conceptos básicos como variables, tipos de datos, estructuras de control de flujo, funciones, arreglos, apuntadores y clases. El documento proporciona ejemplos de código C++ para ilustrar cada uno de estos conceptos.
Conceptos básicos sobre funciones en C: que son, para qué sirven, cómo declararlas, cómo implementarlas, cómo pasar parámetros tanto por valor como por referencia, etc
Conceptos básicos sobre funciones en C: que son, para qué sirven, cómo declararlas, cómo implementarlas, cómo pasar parámetros tanto por valor como por referencia, etc
Descripción de como usar los punteros a funciones en el lenguaje de programación C.
El guión de esta presentación se encuentra en:
http://www.slideshare.net/AnesGy/script-de-punteros-a-funciones
Introducción a la programación en c++.
Contenido:
-Tipos de datos
-Entrada y salida por consola
-String
-Preprocesador
-Operadores y sentencias de control
-Punteros
-Arrays
-Cadenas de caracteres
-Memoria dinámica
-Introducción a la POO en c++
-Referencias
Descripción de como usar los punteros a funciones en el lenguaje de programación C.
El guión de esta presentación se encuentra en:
http://www.slideshare.net/AnesGy/script-de-punteros-a-funciones
Introducción a la programación en c++.
Contenido:
-Tipos de datos
-Entrada y salida por consola
-String
-Preprocesador
-Operadores y sentencias de control
-Punteros
-Arrays
-Cadenas de caracteres
-Memoria dinámica
-Introducción a la POO en c++
-Referencias
1. Inicio A, B C++ Curso Básico A>B A menor que B A mayor que B A mayor que B Final
2.
3.
4. 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;
5. Toma de Decisiones: Operadores de igualad y de Relación. Palabras reservadas.
6. Ejemplo: /* Mi primer programa*/ # include <stdio.h> /* la función main inicia la ejecución del programa*/ int main() { printf(“Bienvenido a C!”); 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.
7.
8.
9.
10. 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; }
11. 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) instrucciones Ejemplo For (contador=1; contador<=10; contador++) { printf(“%d”, contador); }
12. 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);
13. 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.
14. Int máximo(int x, int y, int z) { int Max=x; if (y>Max){ Max=y; } if (z>Max){ Max=z; } return Max; }
15. 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. A [0] Nombre del arreglo A [1] A [2] A [3] A [4] A [5] A [6] A [7] Posición Numérica en el arreglo
16. 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“, “Elemento”, “”Valor ); For (i=0; i<10; i++){ printf( “%7d%13d“, i, n[i] ); return 0; /* indica que el programa terminó con éxito */ }/* fin de la función main */
17. 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; } } }
18. 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*/ }
19. 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.
20. 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*/ }
21. 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.
22. 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” “El valor de ptrA es %p”, &a, ptrA); printf(“El valor de a es %d” “El valor de ptrA es %d”, a, *ptrA); printf(“Muestra de que * y & son complementos” “uno del otro&*ptrA=%p” “*&prtA=%p”, &*ptrA, *&ptrA); return 0; }
23. Clases ++ es una mejoría sobre muchas de las características de C, y proporciona capacidades de P.O.O. que promete mucho para incrementar la productividad, calidad y reutilizació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 son producidos. 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 la reutilizació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 tipos incorporados, para extraer cadenas y para extraer valores de apuntadores. C
24. 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++! ''; return 0; } Todas las palabras claves de C++ están en minúsculas. En C++, las mayúsculas y minúsculas son diferentes.
25. 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.
26. 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 scanf usamos 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, no requieren 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.
27. ASIGNACION DINAMICA DE MEMORIA MEDIANTE NEW Y DELETE En 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 asignada mediante el operando new. PRIMERAS EXTENSIONES ORIENTADAS A OBJETOS COMO PONER EN PRACTICA UN TDA CON UNA CLASE Las 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.
28. 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: y private: 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 miembro private: (y hasta el siguiente especificador de acceso de miembro) sólo es accesible a las funciones miembro de la clase.
29. 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 del nombre del objeto, una referencia a un objeto, o un apuntador a un objeto.
30. COMO CONTROLAR EL ACCESO A MIEMBROS Se 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 mediante el 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''.
31. 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.
32. 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; }
33. // 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 sus clases: Punto apunto; // Punto :: Punto() Punto bpunto(12,34); // Punto :: Punto(const int, const int)
34. 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 el momento 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 ( ~ ):
35. 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;} };
36. 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.
39. 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.
40.
41.
42. 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.
43. Vemos que se ha ejecutado un archivo que está en “C:ev-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.