Está en la página 1de 14

Introducción a C++

Índice
1. Diferencias entre C y C++.
2. Diferencias entre C++ y Java .
3. Ejemplos.
4. Funciones.
5. Memoria dinámica
6. Librería de funciones.

1
1. Diferencias entre C y
C++

Entrada / Salida
ƒ C++ introduce los flujos como mecanismo
unificado de E/S.
#include <stdio.h> #include <iostream.h>

int main(void) int main() {


{ cout << “Quiero daros "
printf(“Quiero daros %d saludos \n”, 8); << 8 << " Saludos!" << endl;
return 0; }
}

ƒ En C sólo se pueden declarar al principio


de un bloque. En C++ en cualquier sitio.

2
Declaración de variables
ƒ C no tiene booleanos. C++ tiene bool y
true y false.
#include <stdio.h> #inlude <iostream.h>
#define TRUE 1
#definr FALSE 0 int main(void)
#typedef int BOOL {
int a = 5, b = 3;
void main() { bool compara;
int a = 5, b = 3;
BOOL compara; compara = (a > b);

compara = (a > b) ? TRUE : FALSE; if (compara)


if (compara) cout << “a es mayor que b.” << endl;
printf(“a es mayor que b.\n”); else
else cout << “b es mayor que a.” << endl;
printf(“b es mayor que a.\n);
} return 0;
}

Declaración de variables
ƒ C++ permite un nuevo tipo de casting.

Estilo C Estilo C++

int main(void) int main(void)


{
{
float a = (float)200;
} float a = float(200);
return 0;
}

3
Declaración de funciones
ƒ En C++ podemos utilizar referencias para
ahorrarnos los punteros.
#include <iostream>
Salida:
void f(int& r) {
cout << "r = " << r << endl;
x = 47
cout << "&r = " << &r << endl;
r = 5; &x = 0065FE00
cout << "r = " << r << endl; r = 47
} &r = 0065FE00
r=5
int main() { x=5
int x = 47;
cout << "x = " << x << endl;
cout << "&x = " << &x << endl;
f(x); cout << "x = " << x << endl;
}

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

4
2. Diferencias entre Java
y C++

Diferencias entre java y c++


ƒƒSintaxis:
Sintaxis:
ƒƒ Prácticamente
Prácticamente idéntica
idéntica en
en C++
C++ yy Java
Java
ƒƒOrientación
Orientación aa objetos:
objetos:
ƒƒ En
En C++ C++ se se pueden
pueden escribir
escribir programas
programas orientados
orientados aa objetos,
objetos, no no
orientados
orientados aa objetos,
objetos, oo mezcla
mezcla de de ambos
ambos (por
(por ejemplo,
ejemplo, tener
tener clases
clas es junto
clases junto
con
con funciones
funciones globales
globales enen elel mismo
mismo programa)
programa)
ƒƒ Java
Java eses puramente
puramente orientado
orientado aa objetos;
objetos; cualquier
cualquier función
función debe
debe pertenecer
pe rtenecer
pertenecer
aa alguna
alguna clase
clase (es
(es un
un método).
método). Existe
Existe la
la función
función main,
main,, pero
main pero es
es un
un método
método
estático
estático de de una
una clase
clase (la
(la clase
clase principal)
principal)
ƒƒControl
Control sobre
sobre la la plataforma
plataforma (hardware+S.O.):
(hardware+S.O.):
ƒƒ CC yy C++:
C++: el el programador
programador tiene tiene control
control del
del procesador.
procesador.
ƒƒ Java:
Java: el programa se ejecuta sobre un procesador virtual
el programa se ejecuta sobre un procesador virtual (JVM)
(JVM) que ue
qque
abstrae
abstrae al al programador
programador de de lala plataforma
plataforma concreta
concreta
ƒƒ Código
Código de de máquina
máquina generado:
generado:
ƒƒ CC yy C++:
C++: el el compilador
compilador genera
genera código
código dede máquina
máquina para
para una
una plataforma
platafo rma
plataforma
concreta
concreta
ƒƒ Java:
Java: el el compilador
compilador genera
genera código
código de de máquina
máquina (bytecode
bytecode)) para
((bytecode) para elel
procesador
procesador JVM; JVM; dicho
dicho código
código debe
debe ser
ser interpretado
interpretado aa posteriori
posteriori

5
Diferencias entre java y c++
ƒƒLiberación
Liberación de
de Memoria:
Memoria:
ƒƒ CC yy C++:
C++: aa cargo
cargo del
del programador
programador (delete
delete))
((delete)
ƒƒ Java:
Java: automática; los objetos creados son
automática; los objetos creados son destruidos
destruidos automáticamente
automáticam
automáticamente ente
cuando se quedan sin referencias. Un proceso
cuando se quedan sin referencias. Un proceso de la JVM llamadode la JVM llamado
recolector
recolector de
de basura
basura (garbage
garbage collector)
((garbage collector
collector))
ƒƒPunteros:
Punteros:
ƒƒ CC yy C++:
C++: existen
existen punteros
punteros concon una
una aritmética
aritmética bien
bien definida,
definida, yy entre
en tre otras
entre otras
cosas,
cosas, permiten programador explorar la memoria del computador físico
permiten programador explorar la memoria del computador ísico
ffísico
ƒƒ Java:
Java: no
no existe
existe el
el concepto
concepto de de puntero;
puntero; los
los objetos
objetos son
son accedidos
accedido
accedidos s
mediante referencias (una referencia se puede considerar como
mediante referencias (una referencia se puede considerar como el propio el propio
identificador
identificador del
del objeto);
objeto); nono existe
existe aritmética
aritmética dede referencias
referencias
ƒƒPaquetes:
Paquetes:
ƒƒ CC yy C++:
C++: no
no existe
existe tal
tal concepto;
concepto; lolo más
más aproximado
aproximado sonson los
los archivos
archi vos de
archivos de
biblioteca (.h)
biblioteca (.h)
ƒƒ Java:
Java: un
un paquete
paquete es es una
una entidad
entidad organizativa
organizativa que
que permite
permite agrupar
agrupar clases,
clases,
interfaces
interfaces y excepciones, así como que sus elementos dispongan de
y excepciones, así como que sus elementos dispongan ddee una
una
determinada
determinada visibilidad
visibilidad con
con respecto
respecto aa elementos
elementos externos
externos alal paquete
paq uete
paquete

Diferencias entre java y c++


ƒƒ Conversión
Conversión implícita
implícita de
de tipos:
tipos:
ƒƒ CC yy C++:
C++: existe
existe (flexibilidad
(flexibilidad para
para el
el programador)
programador)
ƒƒ Java:
Java: nono existe
existe por
por considerarse
considerarse un un mecanismo
mecanismo objeto
objeto de de errores
errores
potenciales
potenciales
ƒƒ Sobrecarga
Sobrecarga de de funciones
funciones yy operadores:
operadores:
ƒƒ C++:
C++: existen ambos tipos de
existen ambos tipos de sobrecarga
sobrecarga
ƒƒ Java:
Java: sólo existe la sobrecarga de
sólo existe la sobrecarga de funciones
funciones (métodos);
(métodos); Los Los
operadores
operadores que existen ya vienen sobrecargados por el
que existen ya vienen sobrecargados por el compilador,
compilador,,
compilador
(p.e.
(p.e. ++ para
para sumar
sumar números
números oo concatenar
concatenar cadenas).
cadenas).
ƒƒ Herencia múltiple:
Herencia múltiple:
ƒƒ C++:
C++: existe
existe
ƒƒ Java:
Java: nono existe
existe por
por considerarse
considerarse poco
poco eficiente
eficiente (esto
(esto implicó
implicó algunas
algunas
algunas
críticas
críticas aa Java
Java desde
desde ciertos
ciertos sectores)
sectores)
ƒƒ Interfaces:
Interfaces:
ƒƒ C++:
C++: no no existen
existen este
este concepto
concepto
ƒƒ Java:
Java: existe el concepto de
existe el concepto de interfaz
interfaz como
como conjunto
conjunto dede especificaciones
especifica ciones
especificaciones
de métodos y de atributos constantes; se estudiará
de métodos y de atributos constantes; se estudiará en la siguiente en la siguiente
siguien te
práctica
práctica

6
Diferencias entre java y c++
ƒƒ Estructuras
Estructuras dinámicas:
dinámicas:
ƒƒ C++:
C++: Librería
Librería STL
STL
ƒƒ Java:
Java: paquete
paquete java.util
java.util.. Los
Los nombres
nombres yy el el
funcionamiento son distintos.
funcionamiento son distintos.
ƒƒ Compiladores:
Compiladores:
ƒƒ C++:
C++: Muchos
Muchos compiladores.
compiladores. Pueden
Pueden ser
ser bastante
bastante
distintos.
distintos.
ƒƒ Java:
Java: Un
Un único
único compilador
compilador siempre
siempre igual.
igual.
ƒƒ Objetos:
Objetos:
ƒƒ C++:
C++: Ningún
Ningún ancestro
ancestro común.
común.
ƒƒ Java:
Java: Todos
Todos los
los objetos
objetos heredan
heredan automáticamente
automáticamente
de Object
de Object. .

Conclusión
Sabemos POO, Java y C:

Ya sabemos C++ !!!


Todo es cuestión de práctica.

7
Ejemplo
ƒ Leer un número por teclado y mostrarlo:
#include <iostream.h>

int main() {
int number;
cout << "Escribe un número: ";
cin >> number;
cout << "Tu número 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 *

8
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 número: ";
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;
}

9
Ejemplo
#include <iostream.h>

ƒ ¿Qué hace este int main() {


char c;
while(true) {
programa?. 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) { #include <iostream.h>
return !(n%2);
} int main() {
if (esPar(8))
cout << 8 << " es par. " << endl;
}

#include <iostream.h>

int main() {
if (!(8%2))
cout << 8 << " es par. " << endl;
}

Parámetros por defecto


ƒ C++ nos permite indicar valores por
defecto para parámetros.
void muestra(int a, int b=0, int c=0) { int main() {
cout << "a = " << a << endl;
cout << "b = " << b << endl; muestra(3);
cout << "c = " << c << endl; muestra(3, 3);
} muestra(3, 3, 3);

¿Cuál es la salida de este return 0;


programa? }
Ojo, los parámetros por
defecto deben ser los
últimos.

11
Práctica
ƒ Volver a escribir programas hechos en C
al sabor C++.

5. Memoria dinámica

12
Memoria dinámica
ƒ Ya no usamos malloc !!!!
int *p; int *p;
p = (int
(int p = new int;
int;
*)malloc(sizeof(int
*)malloc(sizeof(int));
)); (*p)=5;
(*p)=5;

ƒ Tampoco usamos free !!!!


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

Memoria dinámica
#include <iostream.h
<iostream.h>
>
ƒ ¿Cómo creamos una tabla int main() {
dinámica en C++)? int *p;
p = new int[4];
ƒ Exactamente igual que en int c;
Java. for (c = 0; c < 4; c++)
*(p+c
*(p+c)) = c;
ƒ Ejercicio: crear una tabla for (c = 0; c < 4; c++)
dinámica, inicializarla y cout << *(p+c
*(p+c)<<
)<< " ";
cout << endl;
endl;
mostrarla (hay que liberar
delete p;
la memoria al final). return 0;
}

13
6. Librería de funciones

Librería de funciones de C++


ƒ El Estándar C++ define la Librería Estándar que debe
acompañar a cada implementación del compilador que
se adhiera al estándar.
ƒ La norma determina cuales son, como se llaman y como
se utiliza este conjunto de algoritmos que deben
acompañar (como mínimo) a cada implementación del
compilador que quiera llamarse
ƒ La versión, ISO/IEC 14882 del año 1998, especifica que
se compone de 32 ficheros de cabecera:
<algorithm>
algorithm> <iomanip>
iomanip> <list>
list> <ostream>
ostream> <streambuf>
streambuf>
<bitset>
bitset> <ios>
ios> <locale>
locale> <queue>
queue> <string>
string>
<complex>
complex> <iosfwd>
iosfwd> <map>map> <set>
set> <typeinfo>
typeinfo>
<deque> <iostream>
iostream> <memory>
memory> <sstream>
sstream> <utility>
utility>
<exception>
exception> <istream>
istream> <new>
new> <stack>
stack> <valarray>
valarray>
<fstream>
fstream> <iterator>
iterator> <numeric>
numeric> <stdexcept>
stdexcept> <vector>
<functional>
functional> <limits>
limits>

14

También podría gustarte