Subido por Moreno Juarez Osvaldo

P32SbcVecN

Anuncio
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
Descargar