Introduccion a Cpp (basico)

26
Introducción a C++ Introducción a C++ Programación Orientada a Objetos (OOP) Programación Orientada a Objetos (OOP) ENCAPSULACION ENCAPSULACION: No podemos separar los comportamientos de las características de un objeto. Los comportamientos del objeto serán funciones, que en OOP llamaremos MÉTODOS MÉTODOS. HERENCIA HERENCIA: Unos objetos pueden “heredar” métodos y atributos de otros. Esto hace más fácil definir objetos nuevos a partir de otros que ya teníamos anteriormente y facilitará la reutilización de los programas, pudiendo aprovechar buena parte de los anteriores... si están bien diseñados. POLIMORFISMO POLIMORFISMO: Un mismo nombre de un método puede hacer referencia a comportamientos relativamente distintos (como abrir una puerta o abrir un libro). En C++ el polimorfismo llega incluso al nivel de los operadores: podremos “redefinir” el operador + para que sume matrices, ficheros o cualquier tipo de objeto que nos interese.

description

pasar de lenguaje C a C++ (básico)

Transcript of Introduccion a Cpp (basico)

Introducción a C++Introducción a C++

Programación Orientada a Objetos (OOP)Programación Orientada a Objetos (OOP) ENCAPSULACIONENCAPSULACION: No podemos separar los comportamientos

de las características de un objeto. Los comportamientos del objeto serán funciones, que en OOP llamaremos MÉTODOSMÉTODOS.

HERENCIAHERENCIA: Unos objetos pueden “heredar” métodos y atributos de otros. Esto hace más fácil definir objetos nuevos a partir de otros que ya teníamos anteriormente y facilitará la reutilización de los programas, pudiendo aprovechar buena parte de los anteriores... si están bien diseñados.

POLIMORFISMOPOLIMORFISMO: Un mismo nombre de un método puede hacer referencia a comportamientos relativamente distintos (como abrir una puerta o abrir un libro). En C++ el polimorfismo llega incluso al nivel de los operadores: podremos “redefinir” el operador + para que sume matrices, ficheros o cualquier tipo de objeto que nos interese.

Creación de los archivos en C++Creación de los archivos en C++

En C++ Lo habitual y que se debe hacer es dividir En C++ Lo habitual y que se debe hacer es dividir el archivo en 2 o 3 partes.el archivo en 2 o 3 partes.

Las variables (atributos) y los prototipos de las funciones (métodos) se suelen definir en un archivo de cabeceraarchivo de cabecera (los que en C tenían extensión .hh, y que en C++ sería preferible indicar con extensión .hpphpp ó .hhhh, aunque la mayoría de gente no lo hace).

Los detalles concretos de cómo trabaja cada función (el desarrollo) se definen en un archivo fuente normal (los que en C tenían extensión .c, y que en C++ tendrán extensión .cppcpp ó .cccc ó .CC).

Finalmente un tercer archivo seria el que contiene el main, si bien puede ir en el archivo donde esta el desarrollo de las funciones es (a veces) mas fácil tratarlo de forma separada (este archivo también debe tener extensión .cppcpp ó .cccc ó .CC).

Extensiones de los ArchivosExtensiones de los Archivos

cppcpp: es la extensión estándar en MsDos, es decir que si a un compilador de C y C++ para MsDos le decimos que compile un archivo cuya extensión es .cpp, sabrá que se trata de un archivo fuente en C++ y no en C.

cccc: es la extensión estándar en Unix (si intentamos compilar un archivo fuente con extensión cpp desde una versión antigua de Unix, es muy posible que el compilador no reconozca esa extensión como una propia de C++, e intente compilarlo como si se tratase de un archivo fuente de C, de modo que no funcionará).

Extensiones de los ArchivosExtensiones de los Archivos

CC: (en mayúscula) es otra extensión que se puede usar en Unix, pero que es menos aconsejable porque existen muchos sistemas operativos que no distinguen entre mayúsculas y minúsculas, lo que dará problemas de portabilidad (no se podrá distinguir los fuentes en C, con extensión “.c”, de los de C++, con extensión “.C”, si los llevamos a uno de estos sistemas; es el caso de MsDos y de Windows).

Las extensiones .hpphpp (bajo MsDos) y .hhhh (bajo Unix) son aconsejables para indicar que se trata de un archivo de cabecera de C++, pero no es imprescindible, de modo que muchos programadores usan de todas formas la extensión .hh.

Declaraciones después de las Declaraciones después de las instruccionesinstrucciones

En C hay que declarar las variables locales al comienzo de una función; en C++ se pueden declarar después de sentencias ejecutables, lo que permite incluso declararlas justo en el momento de usarlas.

Ejemplo c:

intint i; for(i=0;i<=n,i++);

Ejemplo C++:

for(intint i=0;i<=n;i++);

Acceso a Pantalla y TecladoAcceso a Pantalla y Teclado

Se lee del teclado con “cin>>variablecin>>variable” y se manda a pantalla con “cout<<textocout<<texto”.

Ejemplo c: printf(“intrese la variable %d”,i); scanf(&n);

Ejemplo C++: cout<<”ingrese la variable”<<i; cin>>n;

Cuando se trata de cadenas o stings:

en cen c:char nombre[40];printf(“teclee su nombre”);get(nombre);printf(“te llamas %s verdad?\n”);

en C++en C++:char nombre[40];cout<<”teclee su nombre”;cin>>nombre; //es valido usar gets(nombre);cout<<”te llamas”<<nombre<<”verdad?”<<endl;

Acceso a Pantalla y TecladoAcceso a Pantalla y Teclado

Acceso a Pantalla y TecladoAcceso a Pantalla y Teclado

En C++ también existe un acceso a pantalla, el cual se utiliza para referirse a un error, es el “cerrcerr”, funciona

exactamente igual al “coutcout”.

Ejemplo:cuando deseamos decir al usuario que cometió un

error, lo normal seria:cout<<”el dato ingresado no es valido”;cout<<”el dato ingresado no es valido”;

con el nuevo comando seria:cerr<<”el dato ingresado no es valido”;cerr<<”el dato ingresado no es valido”;

Este comando ayuda al programador a entender que esa salida a pantalla se refiere a un error y no a otra

instrucción.

Valores por DefectoValores por Defecto

Se pueden dar valores por defecto a los parámetros de una función.

void Escribe(char *texto, int x=30, int y=10); Escribe(saludo, 20, 5); // Válido, escribe (20,5) Escribe(saludo, 20); // Válido, escribe (20,10) Escribe(saludo); // Válido, escribe (30,10) Escribe(); // No válido: no hay valor para

"texto"

Operadores new y deleteOperadores new y delete

Dispone de los operadores newnew y deletedelete para reservar memoria dinámica, similares a mallocmalloc y freefree.

Por ejemplo, para crear dinámicamente una cadena de texto de 80 letras se haría:

texto = newnew char[80]; // en vez de = (char *) malloc (80*sizeof(char))

para eliminarla: deletedelete texto;

Función BooleanFunción Boolean

Esta es una función nueva y muy practica en C++, retorna siempre un valor truetrue o falsefalse, sirve mucho para los if.

Como Crearla:bool nombre(int x, int y){bool nombre(int x, int y){

return (y<=x);return (y<=x); //una condición cualquiera//una condición cualquiera

}}

Función BooleanFunción Boolean

Ejemplo:bool cero(int x){

return (x==0);}

int division(int numerador, int denominador){if(cero(denominador)cero(denominador))

cerr<<”no existe division por cero”<<endl;else

return (numerador/denominador);}

Función BooleanFunción Boolean

Si deseamos negar una condición, basta con poner dentro de la condición, antes de llamar a la función el signo “!!”.

Ejemplo:if(if(!!verdadero(x)){...} verdadero(x)){...} //verdadero(x) es una función booleana

Se asume que la función verdadero(x) retornara truetrue, pero al ante ponerle el signo “!” a la función, lo transformamos a falsefalse y como el if solo se realiza si su condición es truetrue, no entrara y pasara a la siguiente condición.

Operador ::Operador ::

Se usa para indicar el ámbito, se utiliza mucho cuando se trabaja con clases, pero también tiene otros usos, como puede ser el de acceder a una variable global cuando existe una variable local con el mismo nombre.

Ejemplo:int i = 5;void funcion () { int i = 4; cout << "La variable local vale " << i; // 4 cout << "La variable global vale " << ::i; //5}

Las Librerías en cLas Librerías en c

#include<stdlib.hstdlib.h>#include<stdio.hstdio.h>#include<math.hmath.h>#include<time.htime.h>#include<string.hstring.h>

#define MAX numero

Las Librerías en C++Las Librerías en C++

#include <iostream>Librería básica de entrada/salida. Imprescindible.

#include <string>Librería para el manejo de string con las funciones mas usuales como strcpy, strncpy, strlen, strcat, strncat, incluso las que sirven para buscar dividir un string en tokens.

#include <time>Libreria para escribir fechas, con distintas opciones. Podemos sacar la fecha del momento y separar los valores de dia, hora, minuto, etc..

#include <stdlib>Otra librería básica, que contiene funciones como los conversores de ascci-integer atoi, algoritmos de ordenación de arreglos como qsort..

Las Librerías en C++ (otras)Las Librerías en C++ (otras)

iomanipiomanip : manipuladores de entrada/salido con argumentos

fstreamfstream : flujos de archivos

sstreamsstream : flujos de cadenas (tipo c++)

strstreamstrstream : flujos de cadenas (tipo c)

vectorvector : contenedor para crear vectores

listlist : contenedor para crear listas

dequedeque : contenedor para una cola de extremo doble

mapmap : contenedor para grupo de pares (id,valor)

Librerias de cLibrerias de c.. Están versioneadas para la librería estándar de c++ las siguientes: cstdlib, cstdio, cerrno, cassert, cstdarg, cstring, ctime, cstdlib, cstdio, cerrno, cassert, cstdarg, cstring, ctime, csignal, cstddef, csetjmp, cmath, clocale, climits, cfloat csignal, cstddef, csetjmp, cmath, clocale, climits, cfloat yy cctype. cctype.

Aclaración:Aclaración:

Las líneas "#include <iostream>#include <iostream>" y "using namespace std;using namespace std;" son necesarias porque

las declaraciones que permiten el acceso a "coutcout" y "cincin" están en una librería externa.

Por esto debes siempre poner la librería iostreamiostream y agregar después de las librerías la linea

using namespace std;using namespace std;

Strings

Se puede crear una cadena sin valor inicial

string texto1;string texto1; Se le puede dar un valor inicial a la vez que se declara

string texto2 = "Hola ";string texto2 = "Hola "; string texto3("Que tal");string texto3("Que tal");

Se puede crear una cadena formada por varias, concatenándolas (sumándolas), usando el signo ++.

texto1 = texto2 + texto3 + " estas? "texto1 = texto2 + texto3 + " estas? "; Se puede crear una subcadena a partir de un trozo de

otra, la vez que se declara.

string subcadena (texto1, 2, 6);string subcadena (texto1, 2, 6); //6 letras de texto1 desde la tercera

StringsStrings

Se puede extraer un fragmento posteriormente

texto1.substr(0, 5);texto1.substr(0, 5); //5 letras de texto1 desde el comienzo

Se puede insertar texto en el interior de una cadena.

Texto1.insert(5, "Juan ");Texto1.insert(5, "Juan "); // Inserto un texto en la posición 6

Reemplazar ciertas letras por otras.

texto2.replace(1, 2, "ad");texto2.replace(1, 2, "ad"); //Cambio 2 letras en la posición 2

StringsStrings

Se puede saber el tamaño (cantidad de letras) de la cadena.

texto1.size()texto1.size() Se puede acceder a una posición siguiendo el estándar de

c.

texto1[2]texto1[2] O bien usando la función “atat”.

texto1.at(2)texto1.at(2) Se puede comprobar el valor de una cadena (el texto

almacenado) con ====.

if(texto2 == "Hada ")if(texto2 == "Hada ")

Asignación a múltiples variablesAsignación a múltiples variables

Otra de las ventajas de C++ es la posibilidad de asignarle un valor a múltiples variables al mismo tiempo sin tener que utilizar mas lineas de código

para el mismo fin.

Asignación a múltiples variablesAsignación a múltiples variables

Ejemplo cEjemplo c:

int a, b, c;

a=5;

b=5;

c=5,

Ejemplo c++Ejemplo c++:

int a,b,c;

a=b=c=5;

Como nos podemos dar cuenta en c++ con este método nos hemos ahorrado 2 lineas de código, haciendo mas liviano nuestro código fuente, que a la larga si es un código muy extenso nos sera de gran ayuda.

Este método sirve tanto para int como para float, char, double, etc.

Compilar en entornos UNIX

Para Archivos en c: gcc nombre_archivo.c -o nombre_ejecutablegcc nombre_archivo.c -o nombre_ejecutable

Para Archivos en C++: g++ nombre_archivo.cc -o nombre_ejecutableg++ nombre_archivo.cc -o nombre_ejecutable

Realizado por:Juan Jose Ramirez Lama

Este archivo describe a simples rasgos como trabajar con C++, es principalmente para quienes pasan de C a C++.

Para profundizar más, se recomienda complementar con otro manuales.