P32SbcVecN.cpp 1) Objetivo. Ilustrar el concepto de sobrecarga de operadores. Definición: Característica de POO en la que un operador, adicionalmente a su acción normal se le implementa otra acción diferente. Existe una relación de los operadores que se pueden sobrecargar: +, ++, -, *, /, %, &, |, >, >>, <, <<, ==, &&, =, ¡. Ejemplo, nuestro programa: Se define la clase “Vector” de nd dimensiones, en donde se sobrecargan los operadores + y - para sumar / restar vectores. 2) Diseño de la clase (Diagrama UML). Vector - Int nd - float ele[MAX] + Vector(int, float []) + Vector(int) + void mostrar() + Vector operator+(Vector); + Vector operator-(Vector); 3) Diagrama de flujo Vector(n, arr[]) Vector(n) nd = n nd = n main Crea objetos Manipula objetos fin I=0; i<nd; i++ ele[i] = arr[i] fin I=0; i<nd; i++ ele[i] = 0 fin mostrar() Operator+(vec) Dimension: nd nd!=vec.nd Operator-(vec) SI nd!=vec.nd Dimensiones diferentes I=0; i<nd; i++ SI Dimensiones diferentes Ele[i] I=0; i<nd; i++ fin I=0; i<nd; i++ ax[i]=ele[i]-vec.ele[i] ax[i]=ele[i]+vec.ele[i] Vector(nd, ax) Vector(nd, ax) fin fin 4) Codificacion. /* P32SbcVeN.cpp Con la clase Vector se sobrecargan los operadores + y - para sumar o restar vectores iguales de nd numero de dimensiones. */ #include<conio.h> #include <iostream> #include <cstdlib> #define MAX 10 using namespace std; class Vector{ private: int nd; //numero de dimensiones float ele[MAX]; //magnitudes de las nd dimensiones public: Vector(int, float arr[]); //constructor con nd y valores de las dimensiones Vector(int); //constructor con nd y valores de las dimensiones igual a cero void mostrar(); Vector operator+(Vector); //sobrecarga de "+" Vector operator-(Vector); //sobrecarga de "-" }; Vector::Vector(int nd, float arr[]){ //para diferenciar nd: "this->nd es dato de la clase, nd valor parametro this->nd = nd; //copiando valores externos a datos de la clase for(int i=0; i<nd; i++) ele[i]=arr[i]; } Vector::Vector(int n){ nd = n; for(int i=0; i<nd; i++) ele[i]=0; } void Vector::mostrar(){ cout << "\nDimension: " << nd <<endl; for(int i=0; i<nd; i++) cout<<ele[i]<<" "; } Vector Vector::operator+(Vector vec){ float ax[MAX]; if(nd!=vec.nd) { cout<<"\n\nDimensiones de los vectores diferentes"; cout<<"\n\tnd: "<<nd<<"\tvec.nd: "<<vec.nd; exit(1); } for(int i=0; i<nd; i++) ax[i]=ele[i]+vec.ele[i]; return Vector(nd, ax); //construye un objVector y lo regresa } Vector Vector::operator-(Vector vec){ float ax[MAX]; if(nd!=vec.nd) { cout<<"\n\nDimensiones de los vectores diferentes\n\tnd: " <<nd<<"\tvec.nd: "<<vec.nd; exit(1); } for(int i=0; i<nd; i++) ax[i]=ele[i]-vec.ele[i]; return Vector(nd, ax); } int main(){ system("cls"); //clrscr(); float arr1[]={1,2,3,4,5},arr2[]={1,2,3,4,5}, arr3[]={2,-4,6,-8,10},arr4[]={1,-6,-3,-12,5}, arr5[]={1,0,-7,-2,-3,16},arr6[]={1.1,2.1,-3.1,4.1,5.1,8}; //se construyen los objetos con los 2 constructores //un objeto es tipo puntero Vector v1(5,arr1), v2(5,arr2), v3(5,arr3), *v4=new Vector(5,arr4), v5(5,arr5), vr(5), v6(6,arr6); cout<<"\n\nvr inicial: "; vr.mostrar(); cout<<"\n\nvr = v1 - v2 + v3 - (*v4) + v5 : "; vr = v1 - v2 + v3 - (*v4) + v5; cout<<"\n\nV1: "; v1.mostrar(); cout<<"\nV2: "; v2.mostrar(); cout<<"\nV3: "; v3.mostrar(); cout<<"\nV4: "; v4->mostrar(); cout<<"\nV5: "; v5.mostrar(); cout<<"\nVR: "; vr.mostrar(); cout<<"\n\nvr = vr + v6 : "; vr = vr + v6; cout<<"\n\nVR: "; vr.mostrar(); cout<<"\nV6: "; v6.mostrar(); delete v4; system("pause>nul"); //getch(); return 0; } 5) Interface de usuario. 6) Requerimientos: Enviar al eMail correspondiente del grupo: 1 Archivo tipo “.cpp” con el código del programa (copia de la codificación del inciso cuatro). 2 Imagen de la pantalla con la ejecución del programa. La captura de una pantalla se obtiene al digitar simultáneamente las teclas “Windows” e “ImpPt”; el archivo con la imagen se encuentra en el directorio …\Pictures\CapturaDePantalla (una aproximación, depende del S.O. instalado y el equipo). Es necesario crear una Carpeta o Directorio en el equipo del alumno con el nombre “POO”. En ese directorio guardar todos los archivos del curso. Este ejercicio debe generar: Archivo Fuente (….cpp, Archivo Objeto (….o), Archivo ejecutable (….exe), pueden guardar adicionalmente el archivo enviado por WhatsApp (P…..pdf). 7) Explicación: De manera genérica todos los programas siguientes de Clase / Objetos (el main) están constituidos por 2 partes; Creación de los objetos y Manipulación de los objetos por medio de los métodos de la clase. Se hace la observación que en el uso de los métodos se debe actuar de una manera lógica (Ejm: un método para obtener el área no se debe aplicar a un objeto que todavía -con otro método- no se le hallan asignado valores para el área). En el código existen comentarios aclaratorios