- HOLAS GENTE....AKI SIGUEIDNO INVESTIGADNO KON RESPECTO A CLASES ABSTTRACTAS Y HERENCIA. A VER SI ME PUEDEN AYUDAR...HE AHI EL CODIGO Y LA ESPLICACION DE LAS DUDAS K TENOG EN CUANTO A LSO CONSTRUCTORES DE LA CLASE PADRE!!!
- Existe unca clase...."Punto.cpp" - que la he implementado para poder usar
sus metodos en las demas clases. Esta en un archivo diferente
class Punto
{
private:
double x,y;
public:
Punto();
Punto(double cx,double cy);
void set_X(double x1);
void set_Y(double y1);
double get_X();
double get_Y();
void desplaza(double deltax,double deltay);
bool esCerrada();
//String toString(); //char
void leer();
double distancia(double x,double y);
Punto dentro();
};
Punto::Punto()
{
x=0;
y=0;
}
Punto::Punto(double cx,double cy)
{
x=cx;
y=cy;
}
void Punto::set_X(double x1)
{
x=x1;
}
void Punto::set_Y(double y1)
{
y=y1;
}
double Punto::get_X()
{
return x;
}
double Punto::get_Y()
{
return y;
}
void Punto::desplaza(double deltax,double deltay)
{
x+=deltax;
y+=deltay;
}
bool Punto::esCerrada()
{
cout<<"\n\t\t";
return false;
}
void Punto::leer() //Ingresa el centro de la figura
{
cout<<" Ingrese la abscisa==> "; cin>>x;
cout<<" Ingrese la ordenada==> "; cin>>y;
}
double Punto::distancia(double x1,double y1) {
double dx=x1-x;
double dy=y1-y;
return sqrt(dx*dx+dy*dy);
}
Punto Punto::dentro()
{
Punto p;
cout<<"\n Ingrese la abscisa a evaluar==> "; cin>>p.x;
cout<<" Ingrese la ordenada a evaluar==> "; cin>>p.y;
return p;
}
- He declarado una clase asbtracta: Lo es poque al menos uno de sus metodos es virtual puro
//Figura.cpp - en un archivo aparte
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <conio.c>
#include <string.h>
class Figura //clase raiz
{
protected:
char nombre[50];
public:
Figura();
Figura(char nombre[50]); //constructor por parametros
virtual double area()=0; // constructor por defecto
virtual void leer()=0;
virtual bool esCerrada()=0;
virtual bool ptodentro()=0;
virtual double per()=0;
} ;
Figura::Figura(char nombre[50])
{
strcpy(nombre,nombre);
}
Figura::Figura()
{
strcpy(nombre,nombre);
}
- Luego tengo esta clase hija: Elipse - qeu esta en otro archivo: "Elipse.cpp"
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <conio.c>
#include <string.h>
#include "Punto.cpp"
#include "Figura.cpp"
class Elipse: public Figura // hereda de Figura y empleo algunos metodos de punto
{
private:
Figura *super; //me sugirieron que declare un puntero "*super" que apunte a un tipo de dato
//del tipo Figura, para que pueda usar el constructor de Figura!!! -* esta bien!!!
double x,y;
protected:
double r1,r2;
Punto centro;
public:
Elipse(char nombre[50],double r1,double r2,Punto centro);
Elipse();
void setCentro(Punto p);
Punto getCentro();
void setRadio1(double r1);
double getRadio1();
void setRadio2(double r2);
double getRadio2();
//Estos metodos han sido declarados en la clase abstracta, necesito volver a ponerlos como
//publicos en la clase hija...yo creo que no, porque ésta los hereda. Aquí solo debo implementarlos,
//pero al eliminarlos, me salen muchos errores!!! - a que se debe??
//En esta clase deverian ser publicos???
void leer();
bool esCerrada();
bool ptodentro();
double area();
double per();
} ;
Elipse::Elipse(char nombre[50],double r3,double r4,Punto centro1)
{
super=Figura(nombre); //como llamo al constructor de la clase padre: Figura!!
r1=r3;
r2=r4;
centro=centro1;
}
Elipse::Elipse()
{
r1=0;
r2=0;
centro=Punto(0,0);
}
double Elipse::per()
{
double area=3.14/2*((r1+r2)+sqrt(r1*r1+r2*r2));
return (area);
}
void Elipse::setCentro(Punto p) {
centro = p;
}
Punto Elipse::getCentro() {
return centro;
}
void Elipse::setRadio1(double r3) {
r1 = r3;
}
double Elipse::getRadio1() {
return r1;
}
void Elipse::setRadio2(double r4) {
r2 = r4;
}
double Elipse::getRadio2() {
return r2;
}
void Elipse::leer()
{
centro.leer();
cout<<" Ingrese el radio 1==> "; cin>>r1;
cout<<" Ingrese el radio 2==> "; cin>>r2;
}
bool Elipse::esCerrada()
{
cout<<"\t\t";
return true;
}
bool Elipse::ptodentro()
{
double i=0,j=0;
Punto aux;
aux=Punto();
aux=aux.dentro();
cout<<"\n\t\tEl punto = ("<<aux.get_X()<<","<<aux.get_Y()<<")";
if((centro.distancia(aux.get_X(),aux.get_Y())<=r1) ||(centro.distancia(aux.get_X(),aux.get_Y())<=r2))
{
return true;
}
else
{
return false;
}
}
double Elipse::area()
{
double p;
return p=3.14*r1*r2;
}
- Para concluir tengo esta otra clase, que deriva de Elipse : "Circulo.cpp"
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <conio.c>
#include <string.h>
#include "Elipse.cpp"
class Circulo: public Elipse
{
private:
Elipse *super;//me sugirieron que declare un puntero "*super" que apunte a un tipo de dato
//del tipo Figura, para que pueda usar el constructor de Figura!!! -* esta bien!!!
double x,y;
public:
Circulo(char nombre[50],double r1, Punto centro);
Circulo();
void leer();
double area();
bool esCerrada();
/*String toString()*/
bool ptodentro();
double per();
};
Circulo::Circulo(char nombre[50],double r1, Punto centro)
{
super=Elipse(nombre,r1,r1,centro);
}
Circulo::Circulo()
{
super=Elipse();
}
//EN AMBOS CONSTRUCTORES COMO ACCEDO AL CONSTRUCTOR DE LA CLASE PADRE.EN ESTE CASO...AL CONSTRUCTOR DE ELIPSE!!!
void Circulo::leer()
{
centro.leer();
cout<<" Ingrese el radio 1==> "; cin>>r1;
r2=r1;
}
double Circulo::area()
{
return (super.area());
}
bool Circulo::esCerrada()
{
cout<<"\t\t";
return true;
}
bool Circulo::ptodentro()
{
double i=0,j=0;
Punto aux;
aux=Punto();
aux=aux.dentro();
cout<<"\n\t\tEl punto = ("<<aux.get_X()<<","<<aux.get_Y();
if(centro.distancia(aux.get_X(),aux.get_Y())<=r1)
{
return true;
}
else
{
return false;
}
}
double Circulo::per()
{
double p;
return p=2*3.14*(super->getRadio1());
}
- AL FINAL TENGO 4 ARCHIVOS SEPARADOS: "Figura.cpp", "Punto.cpp", "Elipse.cpp" y "Circulo.cpp"
- Originalmente este trabajo lo tengo en JAVA, pero mi profesor tambien lo quiere en c++....MIS DUDAS ESTAN CONTENIDAS
en todo el codigo...AGRADECERIA SU AYUDA YA QUE MI PROFESOR NO QUIERE AYUDARNOS,
COMO QUE NO ES..KOMO PROFESOR DEBERIA APOYAR AL ALUMNO..
- ME DESPIDO...Y GARCIAS ANTICIPADAMENTE POR LA AYUDA POR PEKEÑA QUE SEA......