Title: Lenguaje C
1Lenguaje C
Lenguajes de Programación Dra. Ana Lilia Laureano
Cruces
2Lenguaje CIntroducción
- B. Stroustrup, mediados de los 80, ATT
- 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
3Lenguaje C Extensiones respecto al C
- No orientadas a objeto
- Orientadas a objetos
4Lenguaje C Extensiones respecto al C
- No orientadas a objeto
- Mejoras en entrada/salida - streams
- Sobrecarga de funciones y operadores
- Parámetros por defecto. Referencias
5Lenguaje C
- Organización de programas
- Ficheros de declaraciones (.h)
- Del sistema
- Del usuario (ifndef .... define ..... endif)
- Ficheros de código fuente (.cc, .cpp)
6Lenguaje 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
7Lenguaje C
- Operadores y sentencias
- Sentencias
- Misma sintaxis y semántica que las de C
- Operadores idem sentencias excepto
- new, delete, delete,
- ltlt, gtgt
- Sobrecarga
8Lenguaje CEstructura básica de un programa
- includeltiostream.hgt
- main()
- //inicio
- cout ltlt Hello world
- //fin
9Lenguaje CElementos 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
10Lenguaje CTipo básico de datos
- Tipo de dato bool tiene dos valores asociados
true o false - DECLARACIÓN DE UNA VARIABLE
- ltTipo de datogt Nombre_variable
- INICIALIZACION DE UNA VARIABLE
- ltTipo de datogt Nombre_variable valor
- EJEMPLO
- int variable1
- bool variable2true
11Lenguaje 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.
12Lenguaje CArreglos
- Un arreglo es un conjunto de tipos de datos
básicos - DECLARACIÓN DE UN ARREGLO
- ltTipo de dato básicogt Nombre_variableNúmero de
elementos - INICIALIZACION DE UN ARREGLO
- ltTipo de datogt Nombre_variable valor1, valor2,
, valorN - EJEMPLO
- char arreglo110
- float arreglo21.5, 2.3, 6,7
13Lenguaje C Arreglos Multidimencionales
- DECLARACIÓN DE UN ARREGLO MULTIDIMENCIONAL
- ltTipo de dato básicogt Nombre_variableNúmero de
elementosNumero de elementos - INICIALIZACION DE UN ARREGLO MULTIDIMENCIONAL
- ltTipo de datogt Nombre_variable valor1,
valor2, , valorN, valor1, valor2, , valorN
- EJEMPLO
- char arreglo11010
- int arreglo21,2,3,4,5,67,8,9
14Lenguaje CApuntadores y vectores
- Punteros y vectores.
- char v10 //vector de 10 caracteres (0 a 9)
- char p // puntero a un carácter
- p v3 //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
15Lenguaje CTipos 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
16Lenguaje CInstrucciones de control de flujo
- EJEMPLO
- for(int i0 ilt5 i)
- cout ltlt Hello worldltlti
17Lenguaje COperadores
- 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
18Lenguaje CSobrecarga de operadores
- - / ! lt gt - /
- ltlt gtgt gtgt ltlt ! lt gt
-- - -gt -gt , ( ) new new delete
delete - No se sobrecargan
-
- .
- .
19Lenguaje CSobrecarga 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 operatorlt(complex)
-
- void f()
- complex a(1, 3.1)
- complex b(1.2, 2)
- complex c b
- if(ab)
- a b c
- b b c a
- c a b complex(1,2)
-
20Lenguaje CFunciones
- 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
- coutltlta
-
21Lenguaje CFunciones
- extern int pow( float, int)
- int main()
-
- for (int i 0 i lt 10 i)
- cout ltlt pow( 2, 5) ltlt endl
-
22Lenguaje CFunciones
- 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
23Lenguaje CFunciones
- 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)
24Lenguaje CFunciones
- Sobrecarga de nombres.
- int max(int, int)
- int max( int, int, int)
- int max(int , int)
- int max(float, int)
- int max(int, float)
25Lenguaje CSoporte para abstracción de datos
- Definición de un conjunto de 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
26Lenguaje CSoporte para abstracción de datos
- Inicialización y destrucción.
- Inicialización y asignación.
- Patrones.
- Conversiones de tipo
- complex a complex(1)
- Múltiples implementaciones
27Lenguaje CSoporte para orientacion a objetos
- Funciones virtuales. Polimorfismo.
- Clases abstractas.
- Clases patrón.
- Herencia simple y múltiple.
- Encapsulado.
28Lenguaje 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.
29Lenguaje C
- Almacenamiento de objetos
- estático (asignada al iniciarse el programa)
- automático (asociada al bloque)
- en la memoria disponible (obtenida con new)
30Lenguaje C Clases. Tipo abstracto de datos
definido por el usuarioInterface e implementación
- class X
- private
- int i
- public
- f()
- protected
- g()
struct X private int i public f() protected
g()
31Lenguaje Cclases
- 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
32Lenguaje Cclases
- 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
-
33Lenguaje Cclases
- 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
-
34Lenguaje Cclases
- 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)) -
35Lenguaje Cclases
- 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 int10
- delete iap
36Lenguaje Cclases 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
-
37Lenguaje Cclases y herencia múltiple
- class DrawableString public Point, public
DrawableObject - ... public
- DrawableString(...) ...
- DrawableString() ... ...
-