Anda di halaman 1dari 37

Lenguaje C++

Lenguajes de Programación
Master Ramón Sanchez
Lenguaje C++
Introducción
• B. Stroustrup, mediados de los 80,
AT&T

• Paso de la programación tradicional


(C) a estilos de abstracción de datos
y orientación a objetos
• Conserva características del C y
añade nuevos conceptos
Lenguaje C++
Extensiones respecto al C

• No orientadas a objeto

• Orientadas a objetos
Lenguaje C++
Extensiones respecto al C

• No orientadas a objeto
– Mejoras en entrada/salida - streams
– Sobrecarga de funciones y operadores
– Parámetros por defecto. Referencias
Lenguaje C++
• Organización de programas
– Ficheros de declaraciones (.h)
• Del sistema
• Del usuario (#ifndef .... #define ..... #endif)
– Ficheros de código fuente (.cc, .cpp)
Lenguaje C++
• Scope (alcance)
– Fichero: declaraciones que no pertenecen
a función o clase alguna
– Función: etiquetas
– Local: cualquier nombre declarado en un
bloque pertenece al bloque.
– Clase: declaraciones asociadas a una clase
• Cada variable tiene un “scope” o un
contexto
Lenguaje C++
• Operadores y sentencias
– Sentencias
• Misma sintaxis y semántica que las de C
– Operadores idem sentencias excepto:
• new, delete, delete[], ::
• <<, >>
• Sobrecarga
Lenguaje C++
Estructura básica de un
programa
#include<iostream.h>
main()
{//inicio
cout << “Hello world”;
}//fin
Lenguaje C++
Elementos del programa
• COMENTARIOS
• // Comentario de una sola línea
• /* Comentario multilínea */
• BLOQUES DE CÓDIGO
• { Todos los bloques de código van entre
corchetes }
• FIN DE LINEA
• Todas las instrucciones terminan con un
punto y coma
Lenguaje C++
Tipo básico de datos
• Tipo de dato bool tiene dos
valores asociados true o false

• DECLARACIÓN DE UNA
VARIABLE
• <Tipo de dato>
Nombre_variable;

• INICIALIZACION DE UNA
VARIABLE
• <Tipo de dato>
Nombre_variable = [valor];

• EJEMPLO:
• int variable1;
• bool variable2=true;
Lenguaje C++
Tipo básico de datos
• Variables y aritmética.
• Todo nombre y/o expresión tiene un tipo.
• El tipo determina las operaciones que se
pueden realizar con el.
• Conversiones implícitas.
• En asignaciones y operaciones
algebraicas el lenguaje lleva a cabo
todas las conversiones implícitas que
faciliten el uso y sean seguras.
Lenguaje C++
Arreglos
• Un arreglo es un conjunto de tipos de datos básicos

• DECLARACIÓN DE UN ARREGLO
• <Tipo de dato básico> Nombre_variable[Número de
elementos];

• INICIALIZACION DE UN ARREGLO
• <Tipo de dato> Nombre_variable = {valor1, valor2, …,
valorN}];

• EJEMPLO:
• char arreglo1[10];
• float arreglo2={1.5, 2.3, 6,7};
Lenguaje C++
Arreglos
Multidimencionales
• DECLARACIÓN DE UN ARREGLO
MULTIDIMENCIONAL
• <Tipo de dato básico> Nombre_variable[Número de
elementos][Numero de elementos];

• INICIALIZACION DE UN ARREGLO
MULTIDIMENCIONAL
• <Tipo de dato> Nombre_variable = { {valor1,
valor2, …, valorN}, {valor1, valor2, …, valorN} };

• EJEMPLO:
• char arreglo1[10][10];
• int arreglo2[]={{1,2,3},{4,5,6}{7,8,9}};
Lenguaje C++
Apuntadores y vectores
• Punteros y vectores.
char v[10]; //vector de 10 caracteres (0 a 9)
char *p; // puntero a un carácter
p = &v[3]; //p apunta al cuarto elemento de v

• punteros - operaciones asociadas


– int *p; //puntero a entero
– int **p; //puntero a puntero a entero
– int (*vp) [10]; //puntero a vector de 10 enteros
– int (*fp) ( char, char *);// puntero a función
Lenguaje C++
Tipos definidos por el
usuario
• ESTRUCTURAS (Registros)
struct date_s {
int day, month, year;
} aDate;

La definición de arriba de aDate es también la


declaración de una estructura llamada date_s.
Podemos definir otras variables de este tipo
referenciando la estructura por el nombre:

struct date_s anotherDate;


• Enumeraciones
• Clases
Lenguaje C++
Instrucciones de control de flujo
• EJEMPLO
• for(int i=0; i<5; i+
+){
cout << “Hello
world”<<i;
•}
Lenguaje C++
Operadores
Los operadores de
incremento ++ y --
pueden ser explicados
por medio del siguiente
ejemplo. Si tienes la
siguiente secuencia de
instrucciones
a = a + 1; b = a;
Se puede puedes usar
b = a++;
b = ++a;
Lenguaje C++
Sobrecarga de operadores
+ - * / % ^ & | ~ ! = < > += -= *= /=
%= ^= &=
|= << >> >>= <<= == != <= >= &&
|| ++ --
->* -> , [ ] ( ) new new[ ] delete delete[ ]

No se sobrecargan:
::
.
.*
Lenguaje C++
Sobrecarga de operadores
class complex {
double re, im;
public:
complex(double r, double i) : re(r), im(i){}
complex operator+(complex);
complex operator*(complex);
bool operator==(complex);
bool operator<(complex);
};
void f()
{ complex a(1, 3.1);
complex b(1.2, 2);
complex c = b;
if(a==b)
a = b + c;
b = b + c * a;
c = a * b + complex(1,2);
}
Lenguaje C++
Funciones
• Regulares (similares a una función C).
• Miembros (asociadas a una clase).

• Nombre, lista de argumentos, tipo de retorno y


cuerpo.

• int miFuncion(int a); //firma o declaración


• int miFuncion(int a){ //definición
cout<<a;
• }
Lenguaje C++
Funciones
extern int pow( float, int);
int main()
{
for (int i = 0; i < 10; i++)
cout << pow( 2, 5) << endl;
}
Lenguaje C++
Funciones
• Paso de argumentos
– Por valor - seguridad
• copiado en el almacenamiento local de la función
• la función accede a la copia
– Por referencia - velocidad - retornos múltiples
• se copia la dirección del objeto que se esta pasando
• la función accede al objeto
– Por referencia constante - seguridad +
velocidad
• Vectores: paso por referencia
Lenguaje C++
Funciones
• Paso de argumentos
– Por valor
char a = ‘a’;
miFuncion(a);
– Por referencia
char a = ‘a’;
miFuncion(&a);
• Vectores: paso por referencia
char a[] = {‘a’,’b’}
miFuncion(a);
Lenguaje C++
Funciones
• Sobrecarga de nombres.
– int max(int, int);
– int max( int, int, int);
– int max(int *, int);
– int max(float, int);
– int max(int, float);
Lenguaje C++
Soporte para abstracción
• Definición dede datosde
un conjunto
operaciones asociadas a un tipo.
• Restricción del conjunto de operaciones
que se pueden realizar sobre un tipo a
las definidas para el mismo.
• CLASE
– nombre
– datos miembros
– funciones miembro
– control de acceso
Lenguaje C++
Soporte para abstracción de
• Inicialización ydatos
destrucción.
• Inicialización y asignación.
• Patrones.
• Conversiones de tipo
complex a = complex(1);
• Múltiples implementaciones
Lenguaje C++
Soporte para orientacion a
objetos
• Funciones virtuales. Polimorfismo.
• Clases abstractas.
• Clases patrón.
• Herencia simple y múltiple.
• Encapsulado.
Lenguaje C++

• Los objetos se crean al llegar a su


definición.
• Los objetos se destruyen cuando salen del
bloque.
• Los objetos globales se crean una sola vez
y se destruyen al terminar el programa.
• Los objetos static son similares a los
globales.
Lenguaje C++
• Almacenamiento de objetos

– estático (asignada al iniciarse el


programa)

– automático (asociada al bloque)

– en la memoria disponible (obtenida con


new)
Lenguaje C++
Clases.
Tipo abstracto de datos definido por
class X { el usuario
Interface e implementación
private: struct X {
int i; private:
public: int i;
f(); public:
protected: f();
g(); protected:
}; g();
};
Lenguaje C++
clases
• Constructores
– Funciones con el mismo nombre de la
clase pero que no retornan nada.
– Constructor de copia
– Constructor por defecto
– Constructores como conversores de tipo
• Destructores
– virtuales
Lenguaje C++
clases
• CONSTRUCTORES
• class Point {
– int _x, _y;
– public: Point() { _x = _y = 0; }
– void setX(const int val);
– void setY(const int val);
– int getX() { return _x; }
– int getY() { return _y; }
• };
Lenguaje C++
clases
• DESTRUCTORES
• class Point {
– int _x, _y;
– public:
– Point() { _x = _y = 0; }
– Point(const int x, const int y) { _x = x; _y = y; }
– ~Point() { /* ¡Nada qué hacer! */ }
– void setX(const int val);
– void setY(const int val);
– int getX() { return _x; }
– int getY() { return _y; }
• };
Lenguaje C++
clases
• Friend
• Nosotros podemos definir que funciones o clases sean amigos de una
clase para permitirles acceso directo a sus miembros de datos privados.
Por ejemplo, que la función para el operador + tuviese acceso a los
miembros de datos privados _real e _imag de la clase Complex. Con ese
fin declaramos que el operador + sea amigo de la clase Complex:

• class Complex {
• ... public: ...
• friend Complex operator +( const Complex &, const Complex & );
• };

• Complex operator +(const Complex &op1, const Complex &op2) {


• double real = op1._real + op2._real, imag = op1._imag +
op2._imag; return(Complex(real, imag));
• }
Lenguaje C++
clases
• Construcción de objetos
– automáticos
• variables locales: se ejecuta su constructor cada vez
que el programa pasa por la declaración
– secuencia de construcción - destrucción
• inicialización y asignación
– en memoria disponible
• new, delete
– int* ip = new int(7);
– delete ip;
– int* iap = new int[10];
– delete [] iap;
Lenguaje C++
clases y herencia
• class Point3D : public Point {
• int _z;
• public:
– Point3D() { setX(0); setY(0); _z = 0; }
– Point3D(const int x, const int y, const int z) {
setX(x); setY(y); _z = z; }
– ~Point3D() { /* Nada que hacer */ }
– int getZ() { return _z; }
– void setZ(const int val) { _z = val; }
• };
Lenguaje C++
clases y herencia múltiple
• class DrawableString : public
Point, public DrawableObject {
• ... public:
– DrawableString(...){ ... }
– ~DrawableString() { ... } ...
• };