1 Lenguaje C++ Ana Lilia Laureano-CrucesUniversidad Autónoma Metropolitana - Azcapotzalco Lenguaje C++: Ana Laureano_UAM-A
2 Lenguaje C++ IntroducciónBjarne Stroustrup, mediados de los 80s, los laboratorios Bell de AT&T. Permite la manipulación de hardware y de memoria a bajo nivel, esto es, manipulación de lenguajes ensambladores a partir de un lenguaje de alto nivel. Es un lenguaje multi-paradigma: su estructura esta basada en los TAD’s. Donde lo que utilizamos son las interfaces de la librería. .h (interfaz) y .cpp (la implementación y la aplicación) Lenguaje C++: Ana Laureano_UAM-A
3 Lenguaje C++ IntroducciónPaso de la programación estructurada (C) a estilos de abstracción de datos y orientación a objetos. No es un lenguaje puro orientado a objetos. Conserva características del C y añade nuevos conceptos. Utiliza dos formas de abstracción: generalización (jerarquía) y agregación (parte de) Reservación: cuarto, hotel, persona, fecha; Avión, y Boing 747. Lenguaje C++: Ana Laureano_UAM-A
4 Lenguaje C++ Extensiones respecto al CNo orientadas a objeto Mejoras en entrada/salida - streams Polimorfismo: sobrecarga de funciones y operadores (tiempo de compilación) y clases derivadas y funciones virtuales (tiempo de ejecución) Parámetros por defecto. Referencias Lenguaje C++: Ana Laureano_UAM-A
5 Lenguaje C++ FundamentosC ++, es un superconjunto de C, continúa siendo un conjunto de subrutinas o funciones, siendo estas estrictas o procedimientos. Se pueden encontrar en diferentes archivos, y cuentan siempre con la función MAIN, que recibe el control inicialmente. Además de contar con las librerías de funciones del compilador C ++. Lenguaje C++: Ana Laureano_UAM-A
6 Lenguaje C++ Elementos del programaCOMENTARIOS // 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++: Ana Laureano_UAM-A
7 Lenguaje C++ Tipo básico de datosTipo de dato bool tiene dos valores asociados true o false DECLARACIÓN DE UNA VARIABLE
8 Lenguaje C++ Tipo básico de datosVariables 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++: Ana Laureano_UAM-A
9 Lenguaje C++ FundamentosDeclaración de constantes: CONST Tipos derivados Arreglos [ ]: comenzando con el índice 0. Apuntadores *: precede al identificador es una apuntador a una localidad de memoria del tipo declarado, puede ser leído o modificado su contenido. Referencias &: regresa la dirección de la variable. Lenguaje C++: Ana Laureano_UAM-A
10 Lenguaje C++: Ana Laureano_UAM-ALenguaje C++ Arreglos Un arreglo es un conjunto de tipos de datos básicos DECLARACIÓN DE UN ARREGLO
11 Lenguaje C++ Arreglos MultidimencionalesDECLARACIÓN DE UN ARREGLO MULTIDIMENSIONAL
12 Lenguaje C++: Ana Laureano_UAM-AOperadores y sentencias Sentencias Misma sintaxis y semántica que las de C Operadores idem sentencias excepto: new, delete, delete[ ], :: <<, >> Sobrecarga Lenguaje C++: Ana Laureano_UAM-A
13 Lenguaje C++: Ana Laureano_UAM-AInterfaz (.h) Qué Implementación (.cpp) Cómo Lenguaje C++: Ana Laureano_UAM-A
14 Lenguaje C++ FundamentosPrimer programa en C++ // pp1.cpp # include < iostream.h> main ( ) { cout << “ hola mundo ” << endl; } Lenguaje C++: Ana Laureano_UAM-A
15 Lenguaje C++: Ana Laureano_UAM-A//ejem1.cpp #include
16 Lenguaje C++: Ana Laureano_UAM-A//este programa nos muestra el uso de las instrucciones para utilizar //apuntadores //pointer1.cpp #include
17 Lenguaje C++: Ana Laureano_UAM-AScope (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++: Ana Laureano_UAM-A
18 Lenguaje C++ Apuntadores y vectoresPunteros 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 de entero int (*vp) [10]; //puntero a vector de 10 enteros int (*fp) ( char, char *);// puntero a función Lenguaje C++: Ana Laureano_UAM-A
19 Lenguaje C++ Tipos definidos por el usuarioESTRUCTURAS (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; Lenguaje C++: Ana Laureano_UAM-A
20 Lenguaje C++ Tipos definidos por el usuarioEnumeraciones enum_nombre {lista_de_elementos} Así como lo indica el formato a la lista de elementos se le asignan valores enteros secuencialmente iniciando por cero o los que el usuario asigne: enum colores { negro, rojo, verde, azul} enum colores { negro = 2, rojo, verde, azul} Lenguaje C++: Ana Laureano_UAM-A
21 Lenguaje C++: Ana Laureano_UAM-A//Struct1.cpp //este programa demuestra algunas maneras de accesar //los elementos de una estructura #include
22 Lenguaje C++ Estructuras de control de flujoEJEMPLO For (int i=0; i<5; i++) { cout << “Hola mundo”<< i; } Lenguaje C++: Ana Laureano_UAM-A
23 Lenguaje C++ OperadoresLos 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 usar b = a++; b = ++a; Lenguaje C++: Ana Laureano_UAM-A
24 Paso de parámetros por valor y por refrencia en C++En una abstracción funcional todos los parámetros por default son por valor y la función regresa un valor como resultado. En una abstracción procedural los parámetros pueden pasar por valor y/o por referencia Lenguaje C++: Ana Laureano_UAM-A
25 Paso de parámetros por valor en C++#include
29 Lenguaje C++: Ana Laureano_UAM-AClases de C++ Las clases son consideradas como una generalización de las estructuras (struct). Las ventajas de las clases es que pueden estar formadas por partes privadas y por partes públicas. Lenguaje C++: Ana Laureano_UAM-A
30 Lenguaje C++: Ana Laureano_UAM-AClases de C++ class Estructura { public: int posicion; int cuantos; char caracter; }; Esta clase es equivalente a una estructura Lenguaje C++: Ana Laureano_UAM-A
31 Lenguaje C++: Ana Laureano_UAM-AClase Vs. Estructura Clase Todos los elementos son privados. Pueden estar formadas por partes privadas y públicas. Estructura Todos sus elemntos son públicos. Puede contener funciones como miembros. Lenguaje C++: Ana Laureano_UAM-A
32 Lenguaje C++: Ana Laureano_UAM-A//estruc.cpp #include
33 Lenguaje C++: Ana Laureano_UAM-AClases de C++ // este programa crea y usa la clase punto #include
34 Lenguaje C++: Ana Laureano_UAM-ALas uniones en C++ Las uniones sólo asignan espacio suficiente para almacenar el campo de mayor tamaño. (revisar el programa union.cpp) Sus miembros son públicos. Puede contener funciones como miembros. En C++, existe la unión anónima. Lenguaje C++: Ana Laureano_UAM-A
35 Lenguaje C++: Ana Laureano_UAM-ALa Unión anónima No tiene nombre, ni variables especificadas en su decalaración. Los nombres de los miembros se acceden directamente. No pueden incluir elementos privados o protegidos. Lenguaje C++: Ana Laureano_UAM-A
36 Lenguaje C++: Ana Laureano_UAM-A//unionmod.cpp //programa que ejemplifica la union anonima #include
37 Las clases y las estructurasPueden ser superclases de otras clases y estructuras definidas posteriormente; heredandoles sus miembros. Las uniones quedan excluidas de esta propiedad. Lenguaje C++: Ana Laureano_UAM-A
38 Operador de resolución ambitoPara referenciar una variable global (:: i = 3) Para implementar una función miembro de una clase int c1::obt_i (void) { return i; } Lenguaje C++: Ana Laureano_UAM-A
39 Para manejo dinámico de memoria (New y Delete)asigna memoria para un objeto del tipo y tamaño especificados. Devuelve un apuntador a un objeto del tipo especificado, que hace referencia al espacio reservado. Delete: libera la memoria reservada para un objeto. Sólo se puede aplicar a apuntadores que han sido retornados por el operador new. Lenguaje C++: Ana Laureano_UAM-A
40 El manejo del tamaño en newEn el caso de arreglos se especifica explícitamente. En otros casos viene definido por el tipo. El tipo puede ser definido por el usuario. Lenguaje C++: Ana Laureano_UAM-A
41 Lenguaje C++: Ana Laureano_UAM-A//programa que utiliza la asignacion de arrays utilizando new //este programa realiza lo mismo que el anterior pero de una manera //distinta //array2.cpp #include delete [10] p; // borra el array completo return 0; Lenguaje C++: Ana Laureano_UAM-A 42 Constructores y DestructoresEn otros lenguajes uno tiene que asegurar la inicialización de los objetos. C++ los proporciona integrados a la sintaxis del lenguaje. Su ejecución se realiza sin invocarlos explícitamente. Cuando se declara un objeto de un tipo de clase que cuente con constructores, éstos se ejecutan automáticamente. Lenguaje C++: Ana Laureano_UAM-A 43 Lenguaje C++: Ana Laureano_UAM-AConstructores Es una función miembro especial de una clase que es llamada automáticamente siempre que se declara un objeto de esa clase. Su función es crear e inicializar un objeto de su clase. Como funciones miembro aceptan argumentos. Tiene el mismo nombre de la clase a la que pertence. Lenguaje C++: Ana Laureano_UAM-A 44 Lenguaje C++: Ana Laureano_UAM-ADestructores Un objeto es destruido automáticamente al salir del ámbito en el que ha sido definido. Pero si han sido creados con new, tienen forzosamente que ser destruidos con delete. Tiene el mismo nombre que la clase precedido por una ~. No tiene argumento y no es heredado. Lenguaje C++: Ana Laureano_UAM-A 45 Constructores y Destructores// esto crea la clase cola class cola { int c [100]; int ppio, fin; public: cola (void); // constructor ~ cola (void); // destructor void meter (int y); int sacar (void); } Lenguaje C++: Ana Laureano_UAM-A 46 Constructores y Destructorescola::cola (void) { ppio = fin = 0; } cola::~cola (void) Lenguaje C++: Ana Laureano_UAM-A 47 Constructores ParametrizadosPermiten crear las mismas tipos de objetos pero con diferentes identificadores. Permite identificar en un mismo programa a diferentes objetos del mismo tipo (Ej. Cola1 de Cola2). Y almcenar diferentes objetos en ellas. Se logra pasando argumentos a la función constructora. Lenguaje C++: Ana Laureano_UAM-A 48 Constructores Parametrizados// esto crea la clase cola class cola { int c [100]; int ppio, fin; public: cola (int id); // constructor ~ cola (void); // destructor void meter (int y); int sacar (void); } Lenguaje C++: Ana Laureano_UAM-A 49 Constructores Parametrizados// esta es la función constructora cola::cola (int id) { ppio = fin = 0; quien = id; cout << “ cola” << quien << “inicializada \ n”; } Para pasar el argumento a las funciones constructoras, éstos deben ir a continuación del nombre del objeto y encerrado entre paréntesis con el siguiente formato: Tipo_clase var (lista de argumentos) Cola a (1), b(2) // crea dos objetos cola Lenguaje C++: Ana Laureano_UAM-A 50 Lenguaje C++: Ana Laureano_UAM-ATAD Cola: Interfaz //conspara.h #include 51 TAD Cola: Implementación//Conspara.cpp #include 52 Lenguaje C++: Ana Laureano_UAM-Avoid cola::meter(int i) { if(ppio==Max_long) { cout << "la cola esta llena\n"; return; } ppio++; c[ppio] = i; int cola::sacar(void) if(fin==ppio){ cout <<"la cola esta vacia\n"; return 0; else { fin++; return c[fin]; Lenguaje C++: Ana Laureano_UAM-A 53 Lenguaje C++: Ana Laureano_UAM-Avoid cola::Enc_Elem(int busca) { int j, elem; if(ppio==Max_long) { cout << "la cola esta llena\n"; return; } j=ppio; for(j=1; j<=ppio; j++){ elem=c[j]; if(elem==busca) { cout << "El elemento se encontró en la cola: " << busca << "\n"; else { if(j==ppio){ cout << "El elemento no se encontró en la cola \n"; Lenguaje C++: Ana Laureano_UAM-A 54 Lenguaje C++: Ana Laureano_UAM-A//prinpara.cpp //PROGRAMA PRINCIPAL #include 55 Funciones y Clases AmigasUna clase puede conceder a otra funcion o clase privilegiada acceso a sus zonas privadas. Lenguaje C++: Ana Laureano_UAM-A 56 Por qué Cuando dos diferentes clases tienen algo en comúnExisten situaciones en las cuales dos clases deben compartir una misma función, por razones de eficiencia o reusabilidad. (ejemplo amiga.h y amiga.cpp) ; en este caso accede a la variable color que es parte privada de ambas clases Cuando dos diferentes clases tienen algo en común que tienen que comparar.(ejemplo speed.cpp) ; comparten la velocidad de los dos vehículos (camión y automóvil) Lenguaje C++: Ana Laureano_UAM-A 57 Referencias anticipadas a clasesExisten cuando se encuentran implicadas funciones friend. (ejemplo Amiga.h y speed.cpp). Si la función amiga tiene como parámetros ambas clases. Es para que el compilador sepa que el identificador pertenece a una clase. Lenguaje C++: Ana Laureano_UAM-A 58 Lenguaje C++: Ana Laureano_UAM-ACómo lograrlo Lo logra declarando expilícitamente a la clase o función como AMIGA(friend). En cualquier parte privada o pública. Una función miembro de una clase puede ser una función amiga de otra clase. Lenguaje C++: Ana Laureano_UAM-A 59 Lenguaje C++: Ana Laureano_UAM-AClass cosa { private: int datos; public: friend void cargatest (cosa t, int x); } // Implementación de la función Amiga cargatest() void cargatest (cosa t, int x) { t.datos=x; Lenguaje C++: Ana Laureano_UAM-A 60 Lenguaje C++: Ana Laureano_UAM-A//DEFINICION //Amiga.h class linea; // declaración vacía para que el código posterior sepa que es una clase class recuadro{ int color; //Color del recuadro int xsup, ysup; //Esquina superior izquierda int xinf, yinf; //Esquina inferior derecha public: friend int mismo_color(linea l, recuadro b); void pon_color(int c); void definir_recuadro(int x1, int y1, int x2, int y2); void mostrar_recuadro(void); }; class linea{ int color; //Color de la linea int xinicial, yinicial; //Inicio y Fin de linea int lon; //longitud void definir_linea(int x, int y, int l); void mostrar_linea(void); Lenguaje C++: Ana Laureano_UAM-A 61 Lenguaje C++: Ana Laureano_UAM-A//Amiga.cpp #include 62 Lenguaje C++: Ana Laureano_UAM-Avoid recuadro::mostrar_recuadro(void) { int i; textcolor(color); gotoxy(xsup, ysup); for(i=xsup; i<=xinf; i++) cprintf("-"); gotoxy(xsup, yinf-1); for(i=ysup; i<=yinf; i++){ cprintf("|"); gotoxy(xsup, i); } gotoxy(xinf, ysup); gotoxy(xinf, i); Lenguaje C++: Ana Laureano_UAM-A 63 Lenguaje C++: Ana Laureano_UAM-Avoid linea::definir_linea(int x, int y, int l) { xinicial = x; yinicial = y; lon = l; } void linea::mostrar_linea(void) int i; textcolor(color); gotoxy(xinicial, yinicial); for(i=0; i 64 Lenguaje C++: Ana Laureano_UAM-A//prinamig.cpp #include 65 Lenguaje C++: Ana Laureano_UAM-ASpeed.cpp #include 66 Lenguaje C++: Ana Laureano_UAM-Aint mayor_velocidad(automovil c, camion t) { return c.velocidad-t.velocidad; } main(void) char Res; int t; Res = 's'; clrscr(); while ((Res=='s') || (Res=='S')) { automovil c1(4, 55), c2(6,120); camion t1(900, 55), t2(1000, 65); cout << "Comparando c1 y t1: \n"; t = mayor_velocidad(c1, t1); //aqui comparamos t1 y c1 if(t<0) cout <<"El camion va mas rapido. \n"; else if(t==0) cout <<"Ambos tienen la misma velocidad. \n"; else cout <<"El automovil tiene mayor velocidad. \n"; cout<<"deseas desplegarlo de nuevo? (S/N) \n"; cin >> Res; Lenguaje C++: Ana Laureano_UAM-A 67 Lenguaje C++: Ana Laureano_UAM-A// speed1.cpp ; una forma diferente de utilizar a las funciones amigas #include 68 Lenguaje C++: Ana Laureano_UAM-Aint automovil::mayor_velocidad(camion t) { return velocidad-t.velocidad; //Aqui como mayor_velocidad es miembro de la clase automovil, //solamente el objeto camion debe ser pasado a ella. } main(void) char Res; int t; Res = 's'; clrscr(); while ((Res=='s') || (Res=='S')) { automovil c1(4, 55), c2(6,120); camion t1(900, 55), t2(1000, 65); cout << "Comparando c1 y t1: \n"; t = c1.mayor_velocidad(t1); //aqui comparamos t1 y c1 if(t<0) cout <<"El camion va mas rapido. \n"; else if(t==0) cout <<"Ambos tienen la misma velocidad. \n"; else cout <<"El automovil tiene mayor velocidad. \n"; cout << "Comparando c2 y t2: \n"; t = c2.mayor_velocidad(t2); //aqui comparamos t1 y c1 cout<<"deseas desplegarlo de nuevo? (S/N) \n"; cin >> Res; Lenguaje C++: Ana Laureano_UAM-A 69 Sobre funciones amigasIMPORTANTE: Una función amiga no está al alcance de la clase de la cual es amiga. (esto es, no es miembro). No puede ser llamada usando la sintaxis de selección de miembro (scope ::). Se utiliza la palabra reservada friend que debe preceder a la declaración de la función. Al ser una función amiga de una clase puede acceder a los miembros privados de la clase. Lenguaje C++: Ana Laureano_UAM-A 70 Lenguaje C++: Ana Laureano_UAM-AClases Amigas La declaración amiga hace a todas las funciones miembro de esa clase amigas de otra. Class x { friend class y; //… }; Lenguaje C++: Ana Laureano_UAM-A 71 Es una forma en que una clase hereda solamente de una clase.Herencia Sencilla Es una forma en que una clase hereda solamente de una clase. Lenguaje C++: Ana Laureano_UAM-A 1 72 Lenguaje C++: Ana Laureano_UAM-AVocabulario de Clases Una clase que es heredada, se llama clase base o clase madre. Una clase que hereda se llama clase clase derivada o clase hija. Los elementos de una clase pueden ser: publicos, privados o protegidos. Lenguaje C++: Ana Laureano_UAM-A 2 73 Un elemento: Public, Private, ProtectedPublic: puede ser accedido por cualquier función del programa. Private: puede ser accedido por fucniones miembro. Protected: es lo mismo que privado pero además pueden ser accedido/s por funciones miembro y amigas. Lenguaje C++: Ana Laureano_UAM-A 3 74 Cuando una calse hereda de otraLos elementos privados de la clase base son inaccesibles a la clase derivada. Si se desea que las clases derivadas tengan acceso a los elementos privados. Se debe declarar a los elementos privados como protegidos. Lenguaje C++: Ana Laureano_UAM-A 4 75 Acceso a Clases: públicoPublico: todos los elementos publicos y ptotegidos de la clase base se convierten en publicos y protegidos de las clases derivadas. Los privados permanecen privados. Lenguaje C++: Ana Laureano_UAM-A 76 Acceso a Clases:protegidoProtegido: todos los elementos publicos y protegidos de la clase base se convierten en elementos protegidos de la clase derivada. Los privados permanecen privados. Lenguaje C++: Ana Laureano_UAM-A 5 77 Acceso a Clases : privadoPrivado: todos los elementos publicos y protegidos de la clase base se convierten en elementos privados de la clase derivada. Los privados permanecen privados. (ejemplo herencia.cpp) Lenguaje C++: Ana Laureano_UAM-A 5 78 Lenguaje C++: Ana Laureano_UAM-AClases Virtuales Las clases virtuales se utilizan cuando una clase base es clase base de mas de una clase derivada. Lo anterior con el fin de garnatizar que sólo se herede (comparta) una clase base. Una clase virtual debe tener: Ningún constructor, o al menos Un constructor sin argumentos, o Un constructor en que todos sus argumentos tengan valores por omisión. Cuando se construye un objeto de una clase derivada, se aplican primero los constructores de la clase base virtual. Lenguaje C++: Ana Laureano_UAM-A 79 Lenguaje C++: Ana Laureano_UAM-A// verue.h // programa que crea una clase para manejarla con herencia // este programa define 2 campos y 4 operaciones exclusivas de la // clase vehiculo_ruedas. #ifndef __VERUE_H__ #define __VERUE_H__ class vehiculo_ruedas { int ruedas; int pasajeros; public: void est_ruedas (int num); int obt_ruedas (void); void est_pasaj (int num); int obt_pasaj (void); }; #endif Lenguaje C++: Ana Laureano_UAM-A 80 Lenguaje C++: Ana Laureano_UAM-A//camion.h // se crea una clase camion con un campo y 3 operaciones exclusivas // de ella y por otro lado hereda las operaciones de la clase // vehiculo_ruedas #include 81 Lenguaje C++: Ana Laureano_UAM-A//auto.h // programa que define a la clase auto, con un campo y 3 operaciones // exclusivas de esta clase y por otro lado hereda las de // vehiculo_ruedas #include 82 Lenguaje C++: Ana Laureano_UAM-A//verue.cpp // verue.imp // este programa implementa las funciones de la clase // vehiculo_ruedas #include "b:\include\verue.h" void vehiculo_ruedas::est_ruedas (int num) { ruedas = num; } int vehiculo_ruedas::obt_ruedas (void) { return ruedas; void vehiculo_ruedas::est_pasaj (int num) { pasajeros = num; int vehiculo_ruedas::obt_pasaj (void) { return pasajeros; Lenguaje C++: Ana Laureano_UAM-A 83 Lenguaje C++: Ana Laureano_UAM-A//camion.cpp // camion.imp // en esta seccion de programa se implementan las funciones // de la clase camion. #include "b:\include\camion.h" void camion::est_carga (int num) { carga = num; } int camion::obt_carga (void) { return carga; void camion::mostrar (void){ cout<<"ruedas: "< 84 Lenguaje C++: Ana Laureano_UAM-A//auto.cpp // implementacion de las funciones de la clase auto #include "b:\include\auto.h" void automovil::est_tipo (tipo t) { tipo_coche = t ; } tipo automovil::obt_tipo (void) { return tipo_coche; void automovil::mostrar (void) { cout << "ruedas: " << obt_ruedas() << "\n"; cout << "pasajeros: " << obt_pasaj() << "\n"; cout << "tipo: " ; Lenguaje C++: Ana Laureano_UAM-A 85 Lenguaje C++: Ana Laureano_UAM-Aswitch (obt_tipo()) { case camioneta: cout << "camioneta \n"; break; case coche: cout << "coche \n"; case furgon: cout << "furgon \n"; } Lenguaje C++: Ana Laureano_UAM-A 86 Lenguaje C++: Ana Laureano_UAM-A//autoycam.cpp #include "b:\include\camion.h" #include "b:\include\auto.h" void main (void) { camion c1, c2; automovil a; c1.est_ruedas (18); c1.est_pasaj(2); c1.est_carga(3200); c2.est_ruedas (6); c2.est_pasaj (3); c2.est_carga (1200); a.est_ruedas (4); a.est_pasaj (6); a.est_tipo (camioneta); a.mostrar (); c1.mostrar (); c2.mostrar (); } Lenguaje C++: Ana Laureano_UAM-A 87 Sobrecarga de FuncionesEsta función esta ligada con el concepto de polimorfismo. Ejemplo una función que regrese la hora actual y otra que regrese la hora después de la media noche las dos en horas, minutos y segundos. En este caso las dos hacen lo mismo y nodeberían llamarse de forma diferente. Lenguaje C++: Ana Laureano_UAM-A 88 Lenguaje C++: Ana Laureano_UAM-AC ++ permite que los nombres de las funciones se sobrecarguen (overload). Es decir que la misma función tenga mas de una función. Overload GetTime Void GetTime (long* ticks); // segundos a partir de la media noche Void GetTime (int* horas, int* minutos, int* segundos) Lenguaje C++: Ana Laureano_UAM-A 89 Lenguaje C++: Ana Laureano_UAM-ALa primera línea le dice que esta sobrecargada, esto es, que tiene varias definiciones y debe aparecer antes que todas las declaraciones y definicones de dicha función. Cuando se llama GetTime, el compilador compara el número y tipo de los argumentos y escoge la que concuerde con la llamada. Por este motivo todas las definiciones de una función sobrecargada deben tener distinto número o tipo de paráemetros. Lenguaje C++: Ana Laureano_UAM-A 90 Lenguaje C++ Sobrecarga de operadores+ - * / % ^ & | ~ ! = < > += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= && || ->* -> , [ ] ( ) new new[ ] delete delete[ ] No se sobrecargan: :: . .* Lenguaje C++: Ana Laureano_UAM-A 91 Lenguaje C++ Sobrecarga de operadoresclass 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++: Ana Laureano_UAM-A