Red de conocimiento informático - Consumibles informáticos - Ejercicios completos de programación orientada a objetos.

Ejercicios completos de programación orientada a objetos.

Podemos diseñar una clase de puntos para indicar la ubicación de un punto específico en la pantalla, y otras clases pueden usarla. Luego diseñe una clase base Clase de forma y luego derive varias clases basadas en la clase Shpae, como la clase de línea recta, la clase rectangular Rectángulo, la clase círculo círculo y la clase de imagen que llama a sus funciones virtuales miembro respectivamente. Presta atención a expresar las características de cada clase de la forma más sencilla. Este experimento es un diseño de programación muy completo. Espero que todos lo consideren por sí mismos antes de experimentar en la computadora.

El código fuente de referencia experimental es el siguiente:

Colocamos el archivo de encabezado del programa en graphic.h

//Definimos la clase de punto

#include lt;iostream.hgt;

#include lt;stdlib.hgt;

#include lt;math.hgt;

punto de clase

{

privado:

int x, y;

público:

punto()

{

x=0

y=0;

}

punto(int x_pos, int y_pos)

{

x=x_pos

y=y_pos

}

punto( punto constante amp; p )

{

x=p.x

y=p.y

}

int getx()

{

devolver x

}

int gety()

{

return y;

}

};

Explicación: El punto de clase contiene dos elementos básicos que definen el punto, la x. coordenada y la coordenada y, y dos funciones miembro getx() y gety() para obtener cada coordenada. Tiene tres constructores, cada uno de los cuales implementa funciones diferentes. point() asigna un valor de 0 al punto. Como no se asigna memoria, no es necesario un destructor.

//Esta es una enumeración, del blanco al cian representan valores del 0 al 7 respectivamente

enum ColorType{Blanco, Negro, Rojo, Verde, Azul, Amarillo, Magenta, Cyan};

//Definir clase base de forma para formas gráficas

clase Forma

{

protegida:

ColorType color;

público:

Forma(ColorType c)

{

color=c;

}

virtual void Draw()

{

coutlt;lt;"Dibujo no anulado"lt;lt;endl;

exit(1);

}

};

Explicación: La clase Shape proporciona las características públicas de los gráficos que se definirán más adelante. Utiliza un constructor para establecer el color y proporciona una función virtual Draw() que muestra la forma. Cuando los gráficos son diferentes, la implementación de Draw() también es diferente (por ejemplo, hacer un círculo según el radio y el centro es diferente a hacer un rectángulo según el largo y el ancho).

La clase base solo proporciona la forma de llamada de Draw(), y la implementación específica se deja en manos de la clase derivada. Dado que la clase base tiene una declaración exit(1), si usa Draw() de la clase base directamente, se mostrará un mensaje de error.

De la clase Forma derivamos una clase de línea recta:

clase Línea: forma pública

{

privada:

punto inicial, final;

público:

Línea(ColorType c, punto s, punto e): Forma( c)

{

p>

inicio=s

fin=e;

}

virtual void Draw()

{

coutlt;lt;"¡Esta es una línea!"lt;lt;endl;

coutlt;lt;"Su punto de inicio es ("lt;lt;start.getx ()lt ;lt;","lt;lt;start.gety()lt;lt;")."lt;lt;endl;

coutlt;lt;"Su punto final es (" lt;lt ;end.getx()lt;lt;","lt;lt;end.gety()lt;lt;")."lt;lt;endl;

//Puedes agregue algunas otras variables aquí Declaración

}

};

Explicación: La línea contiene dos miembros de datos que definen el punto inicial y el punto final. Su constructor recibe dos puntos y los asigna a los miembros de punto de los miembros inicial y final. También recibe un valor de color en forma de lista de miembros que se pasa al constructor Shape de la clase base. La línea debe definir Draw() nuevamente. Aquí solo se dan declaraciones esquemáticas. Puede completar las funciones de dibujar líneas, rectángulos y círculos llamando a las funciones de la biblioteca de gráficos, que no se describirán en detalle aquí.

La clase Rectángulo y la clase Círculo definidas a continuación son similares a la clase Línea. Ambas definen varios miembros de datos, constructores y la función virtual Draw().

clase Rectángulo: forma pública

{

privado:

punto superior izquierdo

punto inferior derecho;

público:

Rectángulo(ColorType c, punto ul, punto lr): Forma(c)

{

Upperleft=ul;

lowerright=lr;

}

virtual void Draw()

{

coutlt;lt; "¡Esto es un rectángulo!"lt;lt;endl;

coutlt;lt;"Su punto superior izquierdo es ("lt;lt;upperleft.getx()lt;lt;","lt;lt ; ;upperleft.gety()lt;lt;").

"lt;lt;endl;

coutlt;lt;"Su punto inferior derecho es ("lt;lt;lowerright.getx()lt;lt;","lt;lt;lowerright.gety() lt;lt;"). "lt; lt; endl;

// Otras declaraciones.

}

};

clase Círculo: forma pública p>

{

privado:

centro del punto; //centro del círculo

int radio; //radio

público:

Círculo(ColorType c, punto cent, int rad): Forma(c)

{

centro=cent

radio =rad;

}

virtual void Draw()

{

coutlt;lt;"Este es un circulo!"lt ;lt;endl;

coutlt;lt;"Su centro es ("lt;lt;center.getx()lt;lt;","lt;lt;center.gety( )lt;lt ;"). "lt;lt;endl;

coutlt;lt;"Su radio es "lt;lt;radiuslt;lt;". "lt;lt;endl;

//Otras declaraciones

}

};

Finalmente tenemos que diseñar una clase Picture , utilizado para dibujar estos gráficos

clase Imagen

{

privado:

Forma *s[6];

público:

Imagen (Forma* s1, Forma* s2, Forma* s3, Forma* s4, Forma* s5, Forma* s6)

{

s[0]=s1; s[1]=s2; s[2]=s3;

s[3]=s4; s[4]=s5; s6;

}

pintura nula()

{

for(int i=0; ilt; 6; i)

s[i]-gt; Draw();

}

}

Nota: La clase Imagen contiene 6 matrices. de punteros de forma, un constructor y una función paint() que muestra seis formas. Dado que Draw() se define como una función virtual, a paint() no le importa de qué forma está hecha Draw(). solo necesita dibujar estos 6 gráficos uno por uno.

El programa principal se proporciona a continuación y lo colocamos en el archivo gráficos.cpp.

#include "graphic.h"

void main()

{

Línea l1(Rojo, punto(1, 1 ), punto(250, 300));

Línea l2(White, punto(3, 5), punto(100, 200));

// Se definen dos líneas. Líneas rectas rojas y blancas

Círculo c1(Azul, punto(100,75),50);

Círculo c2(Verde, punto(50,200),20);

p>

//Definir dos círculos

Rectángulo r1(Amarillo, punto(10, 10), punto(255, 150));

Rectángulo r2(Magenta, point(20, 30), point (100, 125));

//Definir dos rectángulos

Imagen p(amp; l1, amp; l2, amp; c1, amp ; c2, amp; r1, amp; r2);

p.paint();

}

Explicación: En el programa, generamos seis diferentes. objetos gráficos y pasarlo a la matriz de objetos Imagen Cuando p llama al método paint(), se llama al método Draw() para cada forma a través de la declaración for.

El resultado final es:

¡Esta es una línea!

Su punto inicial es (1, 1).

Su punto final es (250, 300).

¡Esto es una recta!

Su punto inicial es (3, 5).

Su punto final es (100, 200).

¡Esto es un círculo!

Su centro es (100, 75).

Su radio es 50.

¡Esto es un círculo!

Su centro es (50, 200).

Su radio es 20.

¡Esto es un rectángulo!

Su punto superior izquierdo es (10, 10).

Su punto inferior derecho es (255, 150).

¡Esto es un rectángulo!

Su punto superior izquierdo es (20, 30).

Su punto inferior derecho es (100, 125).