Title: Algunas ideas b
1Algunas ideas básicas de C
- Agustín J. González
- ELO-320
2Introducción
- Si ustedes han aprendido otro lenguaje, podrán
ubicarse rápidamente - Es un lenguaje Orientado a Objetos.
- Un objeto es una entidad que contiene nombre,
estado y comportamiento. - Los programas se ven como interacción entre
objetos, no como conjunto de datos y funciones
separados.
3Cambio de visión
- Aún cuando C es un superconjunto de C (i.e. lo
válido en C también lo es en C), lo más
relevante es el manejo de objetos en C.
Computación en C Datosprocedimientos
programa Típico funcion(parametros) Los
datos son pasados a las acciones.
Computación en C ? objetos programa Objeto
NombreEstadocomportamiento Típico
objeto.metodo(parametros) Se le pide a un objeto
que haga una tarea.
4Cambio de visión
- Variables son a tipos en C como objetos son a
clases en C. - Los objetos son instancias de alguna clase.
- Un programa típico define clases, y luego en el
main crea objetos de esas clases y los pone a
trabajar. - El main sigue la estructura de procedimientos/func
ión de C. - Hay clases predefinidas en C.
5Cosas nuevas que se pueden hacer en C
- Podemos crear clases. Si hay clases relacionadas
, podemos crear una en base a otra (herencia o
relación es-un). - Polimorfismo El prototipo de una función queda
definido en forma unívoca con su nombre más la
lista de parámetros, luego se permiteswap(int
a, int b) y swap(float a, float b) en el
mismo programa. - Se puede hacer ligado dinámico. Básicamente es
definir la función a llamar en tiempo de
ejecución. Se invoca un comportamiento, pero
sobre el objeto de turnogt distinto código.
6Cosas nuevas que se pueden hacer en C
- En C se puede definir el significado de los
operadores cuando éstos actúan sobre nuestros
objetos. Por ejemplo si Estudiante es una clase,
podemos hacerEstudiante a(Eduardo),
b(Ivan)if (a gt b) .... - Se pueden crear templates (plantillas). Éstas
permiten definir modelos de funciones o clases
similares.Ej swap(int a, intb) y
swap(floata, floatb)Para qué hacer dos
funciones?
7Cosas nuevas que se pueden hacer en C
- Paso de parámetro por referenciaswap (int a ,
int b) .... - Luego invoco int x, y swap(x,y)
8Comentarios
- // Para comentarios de una línea
- / ......... / Para comentarios de
múltiples líneas - No se permiten los comentarios alineados. Éstos
son extraídos por el preprocesador, el cual no
tiene capacidad de reconocer estas estructuras
gramaticales. - if 0código comentadoendif
- Hay mucho más que aprender sobre el
preprocesador, ver http//profesores.elo.utfsm.cl
/agv/elo329/miscellaneous/preprocessor.pdf
9Tipos de Variable
- int
- short in ( o short)
- long int (o long)
- unsigned int (o unsigned)
- unsigned long int (o unsigned long)
- unsigned short int (unsigned short)
- char
- float
- double
- long double
- bool
10Salida de Datos
- include ltiostreamgtint main (void) cout ltlt
Hello, world ltlt endl return 0 - iostream debe ser incluido para hacer uso de las
operaciones de entrada y salida. - Es posible enviar datos a la salida estándar y a
archivos - include ltfstreamgtofstream os (output.dat)os
ltlt The value of pi is approx. ltlt 3.14.159 ltlt
endl....
11Entrada de Datos
- include ltiostreamgt
- include ltfstreamgt
- using namespace std // en ocasiones no exigido,
para acceder a cout -
- int main()
-
- int i
- ifstream fin
- fin.open("test") // test contains 3 ints
- for (int j0jlt3j)
-
- fin gtgt i
- cout ltlt i ltlt endl
-
- fin.close()
12Lectura desde archivo
- include ltstringgt
- include ltfstreamgt
- include ltiostreamgt
- using namespace std
- int main()
-
- string s
- ifstream fin
- fin.open("/etc/passwd")
- while(getline(fin,s))
- cout ltlt s ltlt endl
-
13Operadores aritméticos
Asociatividad ---gt ---gt ---gt ---gt ---gt ---gt ---gt
---gt ---gt ---gt lt--- lt--- ----gt
- Precedencia en orden decreciente
- () -gt . ---gt ! --
(unario) - (unario) (referencia)
(dirección) (tipo) sizeof - / ---gt -
- ltlt gtgt
- lt lt gt gt
- !
-
-
-
-
-
- ?
- - /
gtgt ltlt - ,
- En principio podríamos usar and en lugar de y
or en lugar de sin embargo, éstos no están
soportados por todos los compiladores.
14Asignaciones, Arreglos y Vectores
- Todas asignación tiene un valor, aquel asignado.
- ANSI C usa el mismo constructor de arreglo que
C - Como los arreglo de C no son particularmente
poderosos, C incorpora los vectores. - Los vectores son una forma de plantilla
(template). Las plantillas es todo un tema en
C, pero su uso es muy simplevector ltXgt
a(n)crea un arreglo astuto de tipo X con
espacio para n elementos. - El acceso es ai
- Puede crecer a voluntad.
15Vectores
- Pueden crecer según nuestra necesidadvector
ltdoublegt a - Inicialmente a está vacío. Para hacerlo
crecera.push_back(0.3)a.push_back(56.2) - También podemos hacer que el vector crezca en
varios elementosa.resize(10) - podemos preguntar por el tamaño de un vector con
a.size() como enfor (int i0 i lt a.size()
i) // .....
16Strings
- En ANSI C tenemos acceso a una poderosa clase
para string. - Ésta tiene definido el operador copia , el
operador concatenación y operadores
relacionales , !, lt, lt, gt, gt, entre otros. - El operador provee acceso a elementos
individuales. - Existen muchos métodos en esta clase como substr
para extraer un substringString s Hola a
todosint n s.length() // n es 12char ch
s0String t s.substr(0,4) // Substring de
s0 a s4
17Control de Flujo
- Se dispone de de las opciones comunes en C.
- if (condición) block1 // Un bloque se delimita
con else block2 - La parte else es opcional.
- While (condición) block
- do block while (condición)
- for(expresión expresión2 expresión3)
instrucción_a_repetir - switch análoga a C.
18Paso por referencia
- En C tenemos un nuevo tipo de paso de
argumentos, el paso por referencia. - Equivale a la opción C en que usamos punteros
para obtener el mismo efecto. - Ejemplo En C podemos hacervoid swap (int x,
int y) int tmp x xy ytmp - El llamado se hace swap(a,b)
- Equivalentemente en Cvoid cswap(int px, int
py) int tmp x x y ytmp - El llamado se hace cswap(a, b)
19Archivos includes
- Muchas estructuras de datos requieren que uno
defina un archivo de inclusión antes que podamos
usarlas. - Propósito Nombre
- stream input/output iostream
- funciones matemáticas math.h
- números complejos complex
- valores booleanos bool.h
- algoritmos genéricos algorithm
- Abstracción vector vector
- Abstracción lista list
- Abstracción conjunto set
- Abstracción mapa map