Introducción a C++ .

Anuncio
Introducción a C++
Índice
1.
2.
3.
4.
5.
6.
Diferencias entre C y C++.
Diferencias entre C++ y Java .
Ejemplos.
Funciones.
Memoria dinámica
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)
{
printf(“Quiero daros %d saludos \n”, 8);
return 0;
}
int main() {
cout << “Quiero daros "
<< 8 << " Saludos!" << endl;
}
ƒ 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>
#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;
}
Declaración de variables
ƒ C++ permite un nuevo tipo de casting.
Estilo C
Estilo C++
int main(void)
{
float a = (float)200;
}
int main(void)
{
float a = float(200);
return 0;
}
3
Declaración 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 librerías del sistema no
trabajan con ellas).
C++ soporta namespaces.
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
es junto
clas
orientados aa objetos,
objetos, oo mezcla
mezcla de
de ambos
ambos (por
(por ejemplo,
ejemplo, tener
tener clases
clases
junto
con
con funciones
funciones globales
globales en
en el
el mismo
mismo programa)
programa)
ƒƒ Java
rtenecer
pe
Java es
es puramente
puramente orientado
orientado aa objetos;
objetos; cualquier
cualquier función
función debe
debe pertenecer
pertenecer
aa alguna
main
alguna clase
clase (es
(es un
un método).
método). Existe
Existe la
la función
función main,
main,, pero
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:
el
programa
se
ejecuta
sobre
un
procesador
ue
qque
Java: el programa se ejecuta sobre un procesador virtual
virtual (JVM)
(JVM) que
abstrae
abstrae al
al programador
programador de
de la
la plataforma
plataforma concreta
concreta
ƒƒ Código
Código de
de máquina
máquina generado:
generado:
ƒƒ CC yy C++:
rma
platafo
C++: el
el compilador
compilador genera
genera código
código de
de máquina
máquina para
para una
una plataforma
plataforma
concreta
concreta
ƒƒ Java:
bytecode)) para
((bytecode)
Java: el
el compilador
compilador genera
genera código
código de
de máquina
máquina (bytecode
para el
el
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++:
delete))
((delete)
C++: aa cargo
cargo del
del programador
programador (delete
ƒƒ Java:
automática;
los
objetos
creados
ente
automáticam
Java: automática; los objetos creados son
son destruidos
destruidos automáticamente
automáticamente
cuando
se
quedan
sin
referencias.
Un
proceso
de
la
JVM
llamado
cuando se quedan sin referencias. Un proceso de la JVM llamado
recolector
garbage collector)
)
((garbage
collector
recolector de
de basura
basura (garbage
collector)
ƒƒPunteros:
Punteros:
ƒƒ CC yy C++:
tre otras
en
C++: existen
existen punteros
punteros con
con una
una aritmética
aritmética bien
bien definida,
definida, yy entre
entre
otras
cosas,
permiten
programador
explorar
la
memoria
del
computador
ísico
ffísico
cosas, permiten programador explorar la memoria del computador físico
ƒƒ Java:
s
accedido
Java: no
no existe
existe el
el concepto
concepto de
de puntero;
puntero; los
los objetos
objetos son
son accedidos
accedidos
mediante
referencias
(una
referencia
se
puede
considerar
como
el
propio
mediante referencias (una referencia se puede considerar como el propio
identificador
identificador del
del objeto);
objeto); no
no existe
existe aritmética
aritmética de
de referencias
referencias
ƒƒPaquetes:
Paquetes:
ƒƒ CC yy C++:
vos de
archi
C++: no
no existe
existe tal
tal concepto;
concepto; lo
lo más
más aproximado
aproximado son
son los
los archivos
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
y
excepciones,
así
como
que
sus
elementos
dispongan
e una
dde
interfaces y excepciones, así como que sus elementos dispongan de
una
determinada
uete
paq
determinada visibilidad
visibilidad con
con respecto
respecto aa elementos
elementos externos
externos al
al paquete
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: no
no 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++:
existen
ambos
tipos
C++: existen ambos tipos de
de sobrecarga
sobrecarga
ƒƒ Java:
sólo
existe
la
sobrecarga
Java: sólo existe la sobrecarga de
de funciones
funciones (métodos);
(métodos); Los
Los
operadores
que
existen
ya
vienen
sobrecargados
por
compilador
operadores que existen ya vienen sobrecargados por el
el 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:
gunas
al
Java: no
no existe
existe por
por considerarse
considerarse poco
poco eficiente
eficiente (esto
(esto implicó
implicó 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:
existe
el
concepto
ciones
especifica
Java: existe el concepto de
de interfaz
interfaz como
como conjunto
conjunto de
de especificaciones
especificaciones
de
métodos
y
de
atributos
constantes;
se
estudiará
en
la
siguiente
te
siguien
de métodos y de atributos constantes; se estudiará en la siguiente
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
ƒ ¿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;
}
Parámetros por defecto
ƒ C++ nos permite indicar valores por
defecto para parámetros.
void muestra(int a, int b=0, int c=0) {
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
}
¿Cuál es la salida de este
programa?
int main() {
muestra(3);
muestra(3, 3);
muestra(3, 3, 3);
return 0;
}
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;
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 dinámica
ƒ ¿Cómo creamos una tabla
dinámica en C++)?
ƒ Exactamente igual que en
Java.
ƒ Ejercicio: crear una tabla
dinámica, inicializarla y
mostrarla (hay que liberar
la memoria al final).
#include <iostream.h
>
<iostream.h>
int main() {
int *p;
p = new int[4];
int c;
for (c = 0; c < 4; c++)
*(p+c
*(p+c)) = c;
for (c = 0; c < 4; c++)
cout << *(p+c
)<< " ";
*(p+c)<<
cout << endl;
endl;
delete p;
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>
<ostream>
algorithm> <iomanip>
iomanip> <list>
list>
ostream> <streambuf>
streambuf>
<bitset>
<ios>
<locale>
<string>
bitset>
ios>
locale> <queue>
queue>
string>
<complex>
<set>
<typeinfo>
complex> <iosfwd>
iosfwd> <map>
map>
set>
typeinfo>
<deque>
<iostream>
iostream> <memory>
memory> <sstream>
sstream> <utility>
utility>
<exception>
<stack>
<valarray>
exception> <istream>
istream> <new>
new>
stack>
valarray>
<fstream>
fstream> <iterator>
iterator> <numeric>
numeric> <stdexcept>
stdexcept> <vector>
<functional>
functional> <limits>
limits>
14
Descargar