Está en la página 1de 14

Introduccin a C++

ndice
1. 2. 3. 4. 5. 6.
Diferencias entre C y C++. Diferencias entre C++ y Java . Ejemplos. Funciones. Memoria dinmica Librera de funciones.

1. Diferencias entre C y C++

Entrada / Salida
C++ introduce los flujos como mecanismo unificado de E/S.
#include <stdio.h> int main(void) { printf(Quiero daros %d saludos \n, 8); return 0; } #include <iostream.h> int main() { cout << Quiero daros " << 8 << " Saludos!" << endl; }

En C slo se pueden declarar al principio de un bloque. En C++ en cualquier sitio.

Declaracin de variables
C no tiene booleanos. C++ tiene bool y true y false.
#include <stdio.h> #define TRUE 1 #definr FALSE 0 #typedef int BOOL void main() { int a = 5, b = 3; BOOL compara; compara = (a > b) ? TRUE : FALSE; if (compara) printf(a es mayor que b.\n); else printf(b es mayor que a.\n); } #inlude <iostream.h> int main(void) { int a = 5, b = 3; bool compara; compara = (a > b); if (compara) cout << a es mayor que b. << endl; else cout << b es mayor que a. << endl; return 0; }

Declaracin de variables
C++ permite un nuevo tipo de casting.
Estilo C int main(void) { float a = (float)200; }

Estilo C++ int main(void) { float a = float(200); return 0; }

Declaracin de funciones
En C++ podemos utilizar referencias para ahorrarnos los punteros.
#include <iostream> void f(int& r) { cout << "r = " << r << endl; cout << "&r = " << &r << endl; r = 5; cout << "r = " << r << endl; } int main() { int x = 47; cout << "x = " << x << endl; cout << "&x = " << &x << endl; f(x); cout << "x = " << x << endl; }

Salida: x = 47 &x = 0065FE00 r = 47 &r = 0065FE00 r=5 x=5

Otras diferencias
1. C++ permite la sobrecarga de 2. 3. 4.
operadores. C++ incluye soporte para excepciones (aunque las libreras del sistema no trabajan con ellas). C++ soporta namespaces. C++ soporta plantillas.

2. Diferencias entre Java y C++

Diferencias entre java y c++


Sintaxis: Sintaxis: Prcticamente idntica en C++ y Java Prcticamente idntica en C++ y Java Orientacin a objetos: Orientacin a objetos: En C++ se pueden escribir programas orientados a objetos, no En C++ se pueden escribir programas orientados a objetos, no orientados a objetos, o mezcla de ambos (por ejemplo, tener clases junto orientados a objetos, o mezcla de ambos (por ejemplo, tener clases junto clases con funciones globales en el mismo programa) con funciones globales en el mismo programa) Java es puramente orientado a objetos; cualquier funcin debe pertenecer Java es puramente orientado a objetos; cualquier funcin debe pertenecer pertenecer a alguna clase (es un mtodo). Existe la funcin main, pero es un mtodo a alguna clase (es un mtodo). Existe la funcin main, pero es un mtodo main, esttico de una clase (la clase principal) esttico de una clase (la clase principal) Control sobre la plataforma (hardware+S.O.): Control sobre la plataforma (hardware+S.O.): C y C++: el programador tiene control del procesador. C y C++: el programador tiene control del procesador. Java: el programa se ejecuta sobre un procesador virtual (JVM) que Java: el programa se ejecuta sobre un procesador virtual (JVM) que que abstrae al programador de la plataforma concreta abstrae al programador de la plataforma concreta C y C++: el compilador genera cdigo de mquina para una plataforma C y C++: el compilador genera cdigo de mquina para una plataforma plataforma concreta concreta Java: el compilador genera cdigo de mquina (bytecode) para el bytecode) Java: el compilador genera cdigo de mquina ((bytecode) para el procesador JVM; dicho cdigo debe ser interpretado a posteriori procesador JVM; dicho cdigo debe ser interpretado a posteriori

Cdigo de mquina generado: Cdigo de mquina generado:

Diferencias entre java y c++


Liberacin de Memoria: Liberacin de Memoria: C y C++: a cargo del programador (delete) delete) C y C++: a cargo del programador ((delete) Java: automtica; los objetos creados son destruidos automticamente Java: automtica; los objetos creados son destruidos automticamente automticamente cuando se quedan sin referencias. Un proceso de la JVM llamado cuando se quedan sin referencias. Un proceso de la JVM llamado recolector de basura (garbage collector) garbage collector) recolector de basura ((garbage collector) Punteros: Punteros: C y C++: existen punteros con una aritmtica bien definida, y entre otras C y C++: existen punteros con una aritmtica bien definida, y entre otras entre cosas, permiten programador explorar la memoria del computador fsico sico cosas, permiten programador explorar la memoria del computador ffsico Java: no existe el concepto de puntero; los objetos son accedidos Java: no existe el concepto de puntero; los objetos son accedidos accedidos mediante referencias (una referencia se puede considerar como el propio mediante referencias (una referencia se puede considerar como el propio identificador del objeto); no existe aritmtica de referencias identificador del objeto); no existe aritmtica de referencias Paquetes: Paquetes: C y C++: no existe tal concepto; lo ms aproximado son los archivos de C y C++: no existe tal concepto; lo ms aproximado son los archivos de archivos biblioteca (.h) biblioteca (.h) Java: un paquete es una entidad organizativa que permite agrupar clases, Java: un paquete es una entidad organizativa que permite agrupar clases, interfaces y excepciones, as como que sus elementos dispongan de una interfaces y excepciones, as como que sus elementos dispongan de una de determinada visibilidad con respecto a elementos externos al paquete determinada visibilidad con respecto a elementos externos al paquete paquete

Diferencias entre java y c++


Conversin implcita de tipos: Conversin implcita de tipos: C y C++: existe (flexibilidad para el programador) C y C++: existe (flexibilidad para el programador) Java: no existe por considerarse un mecanismo objeto de errores Java: no existe por considerarse un mecanismo objeto de errores potenciales potenciales Sobrecarga de funciones y operadores: Sobrecarga de funciones y operadores: C++: existen ambos tipos de sobrecarga C++: existen ambos tipos de sobrecarga Java: slo existe la sobrecarga de funciones (mtodos); Los Java: slo existe la sobrecarga de funciones (mtodos); Los operadores que existen ya vienen sobrecargados por el compilador, operadores que existen ya vienen sobrecargados por el compilador, compilador, (p.e. + para sumar nmeros o concatenar cadenas). (p.e. + para sumar nmeros o concatenar cadenas). Herencia mltiple: Herencia mltiple: C++: existe C++: existe Java: no existe por considerarse poco eficiente (esto implic algunas Java: no existe por considerarse poco eficiente (esto implic algunas algunas crticas a Java desde ciertos sectores) crticas a Java desde ciertos sectores) Interfaces: Interfaces: C++: no existen este concepto C++: no existen este concepto Java: existe el concepto de interfaz como conjunto de especificaciones Java: existe el concepto de interfaz como conjunto de especificaciones especificaciones de mtodos y de atributos constantes; se estudiar en la siguiente de mtodos y de atributos constantes; se estudiar en la siguiente siguiente prctica prctica

Diferencias entre java y c++


Estructuras dinmicas: Estructuras dinmicas: C++: Librera STL C++: Librera STL Java: paquete java.util. Los nombres y el Java: paquete java.util. Los nombres y el funcionamiento son distintos. funcionamiento son distintos. Compiladores: Compiladores: C++: Muchos compiladores. Pueden ser bastante C++: Muchos compiladores. Pueden ser bastante distintos. distintos. Java: Un nico compilador siempre igual. Java: Un nico compilador siempre igual. Objetos: Objetos: C++: Ningn ancestro comn. C++: Ningn ancestro comn. Java: Todos los objetos heredan automticamente Java: Todos los objetos heredan automticamente de Object. de Object.

Conclusin
Sabemos POO, Java y C:

Ya sabemos C++ !!!


Todo es cuestin de prctica.

Ejemplo
Leer un nmero por teclado y mostrarlo:
#include <iostream.h>

int main() { int number; cout << "Escribe un nmero: "; cin >> number; cout << "Tu nmero es: " << number << endl; cout << "En octal es: " << oct << number << endl; cout << "En hexadecimal es: " << hex << number << endl; }

Ejemplo
Podemos usar las cadenas al estilo C, pero STD nos da la clase string
#include <iostream.h> using namespace std; int main() { string s1, s2; string s3 = "Hola"; cout << "Escribe tu nombre: "; cin >> s2; s1 = s3 + " " + s2 + "!"; cout << s1 + "." << endl; }

Ojo, el tipo de una cadena sigue siendo char *

Ejemplo
Qu hace este programa?.
#include <iostream.h> char cfunc(int i) { if(i == 0) return 'a'; if(i == 1) return 'g'; if(i == 5) return 'z'; return 'c'; } int main() { cout << Escribe un nmero: "; int val; cin >> val; cout << cfunc(val) << endl; }

Ejemplo
Qu hace este programa?.
#include <iostream.h> int main() { for(int i = 0; i < 128; i = i + 1) cout << " Valor: " << i << " Caracter: " << char(i) << endl; }

Ejemplo
Qu hace este programa?.
#include <iostream.h> int main() { char c; while(true) { cout << "Elija una:" << endl << "l, r, q > "; cin >> c; if(c == 'q') break; if(c == 'l') { cout << "Letra l" << endl; continue; } if(c == 'r') { cout << "Letra r" << endl; continue; } cout << Elija una de las tres!" << endl; } cout << "Fin." << endl; }

3. Funciones

10

Funciones insertadas
Similar a las macros, en vez de llamarse se insertan:
inline bool esPar(int n) { return !(n%2); } #include <iostream.h> int main() { if (esPar(8)) cout << 8 << " es par. " << endl; }

#include <iostream.h> int main() { if (!(8%2)) cout << 8 << " es par. " << endl; }

Parmetros por defecto


C++ nos permite indicar valores por defecto para parmetros.
void muestra(int a, int b=0, int c=0) { cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "c = " << c << endl; } Cul es la salida de este programa? Ojo, los parmetros por defecto deben ser los ltimos. int main() { muestra(3); muestra(3, 3); muestra(3, 3, 3); return 0; }

11

Prctica
Volver a escribir programas hechos en C al sabor C++.

5. Memoria dinmica

12

Memoria dinmica
Ya no usamos malloc !!!!
int *p; p = (int (int *)malloc(sizeof(int)); *)malloc(sizeof(int)); (*p)=5; int *p; p = new int; int; (*p)=5;

Tampoco usamos free !!!!


free(p); free(p); delete p;

Memoria dinmica
#include <iostream.h> <iostream.h>

Cmo creamos una tabla dinmica en C++)? Exactamente igual que en Java. Ejercicio: crear una tabla dinmica, inicializarla y mostrarla (hay que liberar la memoria al final).

int main() { int *p; p = new int[4]; int c; for (c = 0; c < 4; c++) *(p+c) = c; *(p+c) for (c = 0; c < 4; c++) cout << *(p+c)<< " "; *(p+c)<< cout << endl; endl; delete p; return 0; }

13

6. Librera de funciones

Librera de funciones de C++


El Estndar C++ define la Librera Estndar que debe acompaar a cada implementacin del compilador que se adhiera al estndar. La norma determina cuales son, como se llaman y como se utiliza este conjunto de algoritmos que deben acompaar (como mnimo) a cada implementacin del compilador que quiera llamarse La versin, ISO/IEC 14882 del ao 1998, especifica que se compone de 32 ficheros de cabecera:
<algorithm> <iomanip> <list> <ostream> <streambuf> algorithm> iomanip> list> ostream> streambuf> <bitset> <ios> <locale> <queue> <string> bitset> ios> locale> queue> string> <complex> <iosfwd> <map> <set> <typeinfo> complex> iosfwd> map> set> typeinfo> <deque> <iostream> <memory> <sstream> <utility> iostream> memory> sstream> utility> <exception> <istream> <new> <stack> <valarray> exception> istream> new> stack> valarray> <fstream> <iterator> <numeric> <stdexcept> <vector> fstream> iterator> numeric> stdexcept> <functional> <limits> functional> limits>

14

También podría gustarte