Algunas ideas bsicas de C Agustn J Gonzlez
Algunas ideas básicas de C++ Agustín J. González ELO-320 1
Introducción n 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. 2
Cambio de visión 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 Datos+procedimientos = programa Típico: funcion(parametros); Los datos son pasados a las acciones. Computación en C++ objetos = programa Objeto = Nombre+Estado+comportamiento Típico: objeto. metodo(parametros) Se le pide a un objeto que haga una tarea. 3
Cambio de visión n 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/función de C. Hay clases predefinidas en C++. 4
Cosas nuevas que se pueden hacer en C++ n n n 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 permite: swap(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 turno=> distinto código. 5
Cosas nuevas que se pueden hacer en C++ n n 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 hacer; Estudiante a(“Eduardo”), b(“Ivan”); if (a > b). . Se pueden crear templates (plantillas). Éstas permiten definir modelos de funciones o clases similares. Ej: swap(int *a, int*b) y swap(float*a, float*b) Para qué hacer dos funciones? 6
Cosas nuevas que se pueden hacer en C++ n n Paso de parámetro por referencia: swap (int & a , int & b) {. . } Luego invoco: int x, y; swap(x, y); 7
Comentarios n n n // 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 0 código comentado #endif Hay mucho más que aprender sobre el preprocesador, ver: http: //profesores. elo. utfsm. cl/~agv/elo 329/miscellaneous/prepro cessor. pdf 8
Tipos de Variable n n n 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 9
Salida de Datos n n #include <iostream> int main (void) { cout << “Hello, world” << 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 <fstream> ofstream os (“output. dat”); os << “The value of pi is approx. “ << 3. 14. 159 << endl; . . 10
Entrada de Datos #include <iostream> #include <fstream> 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 j=0; j<3; j++) { fin >> i; cout << i << endl; } fin. close(); } 11
Lectura desde archivo #include <string> #include <fstream> #include <iostream> using namespace std; int main() { string s; ifstream fin; fin. open("/etc/passwd"); while(getline(fin, s)) cout << s << endl; } 12
Operadores aritméticos Asociatividad ---> ---> ---> <--<------> Precedencia en orden decreciente () [] ->. ---> ! ~ ++ -- + (unario) - (unario) *(referencia) & (dirección) (tipo) sizeof * / % ---> + << >> < <= > >= == != & ^ | && || ? : = += -= *= /= %= &= ^= |= >>= <<= , 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. 13
Asignaciones, Arreglos y Vectores n n n 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 simple: vector <X> a(n); crea un arreglo “astuto” de tipo X con espacio para n elementos. El acceso es a[i] Puede crecer a voluntad. 14
Vectores n n Pueden crecer según nuestra necesidad vector <double> a; Inicialmente a está vacío. Para hacerlo crecer: a. push_back(0. 3); a. push_back(56. 2); También podemos hacer que el vector crezca en varios elementos: a. resize(10); podemos preguntar por el tamaño de un vector con a. size(); como en: for (int i=0; i < a. size(); i++) //. . . 15
Strings n n En ANSI C++ tenemos acceso a una poderosa clase para string. Ésta tiene definido el operador copia =, el operador concatenación + y operadores relacionales ==, !=, <, <=, >, >=, entre otros. El operador [ ] provee acceso a elementos individuales. Existen muchos métodos en esta clase como substr para extraer un substring: String s = “Hola a todos”; int n = s. length(); // n es 12 char ch = s[0]; String t = s. substr(0, 4); // Substring de s[0] a s[4] 16
Control de Flujo n n n n Se dispone de de las opciones comunes en C. if (condición) block 1 // Un bloque se delimita con { } else block 2 La parte else es opcional. While (condición) block do block while (condición); for(expresión; expresión 2; expresión 3) instrucción_a_repetir switch : análoga a C. 17
Paso por referencia n n n 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 hacer void swap (int & x, int & y) { int tmp = x; x=y; y=tmp; } n n El llamado se hace swap(a, b); Equivalentemente en C: void cswap(int * px, int * py) { int tmp = *x; *x = *y; *y=tmp; } n El llamado se hace cswap(&a, &b) 18
Archivos includes n n 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 Abstracción lista list Abstracción conjunto set Abstracción mapa map 19
- Slides: 19