Вы находитесь на странице: 1из 7

HERENCIA CIRCULO-CILINDRO

#include<stdlib.h>
#include<iostream>
#include<math.h>
using namespace std;
const double PI=2.0*asin(1.0);
class Circulo
{
protected:
double radio;
public:
Circulo (double=1.0); //constructor con mismo nombre que la clase
double calcval();
};
//implementacion de la clase
//constructor
Circulo::Circulo(double r)
{
radio = r;
}
//Calculo del area de un circulo
double Circulo::calcval()
{ return(PI*radio*radio); }
//declaracion de la clase para la clase derivada
//cilindro que se deriva del circulo
class cilindro:public Circulo
{
protected:
double largo; //miembro de dato adicional
public: //miembros de funciones adicionales
cilindro(double r=1.0, double l=1.0): Circulo(r), largo(l){}
double calcval(); //aqui se nota la herencia
};
// Seccion de implementacion para Cilindro
double cilindro::calcval() // clculo del volumen
{ return (largo*Circulo::calcval()); //se llama a la funcion base }
int main()
{
Circulo circulo_1, circulo_2(2); //creamos dos objetos Circulo
cilindro cilindro_1(3,4); //creamos un objeto Cilindro
cout<<"El area del circulo_1 es:"<<circulo_1.calcval()<< endl;
cout<<"\nEl area del circulo_2 es:"<<circulo_2.calcval()<< endl;
cout<<"\nEl volumen del cilindro_1 es:"<<cilindro_1.calcval()<< endl;
circulo_1= cilindro_1; //asignamos un cilindro a un circulo
cout<<"\nEl area del circulo_1 es ahora:"<<circulo_1.calcval()<< endl;
system("PAUSE");
return EXIT_SUCCESS;
}
HERENCIA CUADRADO-CUBO
#include<cstdlib>
#include<iostream>
#include<cmath>
using namespace std;
class Cuadrado
{
protected:
double arista;
public:
Cuadrado (double = 1.0); //constructor con mismo nombre que la clase
double calcval();
};
//implementacion de la clase
//constructor
Cuadrado::Cuadrado(double ar)
{
arista = ar;
}
//Calculo del area de un cuadrado
double Cuadrado::calcval()
{ return(arista*arista); }
//declaracion de la clase para la clase derivada
//cubo que se deriva del cuadrado
class Cubo:public Cuadrado
{
protected:
double altura; //miembro de dato adicional
public: //miembros de funciones adicionales
Cubo(double ar=1.0, double a=1.0): Cuadrado(ar), altura(a){}
double calcval(); //aqui se nota la herencia
};
// Seccion de implementacion para Cubo
double Cubo::calcval() // clculo del volumen
{ return (altura*Cuadrado::calcval()); //se llama a la funcion base }
int main()
{
Cuadrado cuadrado_1, cuadrado_2(4); //creamos dos objetos Cuadrado
Cubo cubo_1(5,8); //creamos un objeto Cubo
float ar;
cout<<"El area del cuadrado_1 es:"<<cuadrado_1.calcval()<< endl;
cout<<"El area del cuadrado_2 es:"<<cuadrado_2.calcval()<< endl;
cout<<"\nEl volumen del cubo_1 es:"<<cubo_1.calcval()<< endl;
cuadrado_1= cubo_1; //asignamos un cubo a un cuadrado
cout<<"\nEl area del cuadrado_1 es ahora:"<<cuadrado_1.calcval()<< endl;
system("PAUSE");
return EXIT_SUCCESS;
}
RESULTADO DE LA FUNCION UNO
#include<cstdlib>
#include<iostream>
#include<cmath>
using namespace std;
//Declaracion de la clase para la clase base
class Uno
{
protected:
double a;
public:
Uno(double = 2.0); //constructor
virtual double f1(double); // una funcin miembro
double f2(double); //otra funcin miembro
};
//implementacn de la clase para Uno
Uno::Uno (double val) //constructor
{ a= val; }
double Uno::f1(double num) // funcin miembro
{ return(num/2); }
double Uno::f2(double num) //otra funcin miembro
{
return (pow(f1(num),2)); //f1() al cuadrado
}
//Declaracin de la clase para la clase derivada
class Dos:public Uno
{
public:
virtual double f1(double); //esto anula a f1() de la clase Uno
};

//Implementacin de la clase para Dos


double Dos::f1(double num)
{ return(num/3); }
int main()
{
Uno objeto_1; //este objeto es un objeto de la clase base
Dos objeto_2; //este objeto es un objeto de la clase derivada
//llama a f2() usando una llamada al objeto de la clase base
cout<<"El valor calculado usando una llamada a un objeto de la clase base
es:"<<objeto_1.f2(12)<<endl;
//llamada a f2() usando una llamada al objeto de la clase derivada
cout<<"El valor calculado usando una llamada a un objeto de la clase derivada
es:"<<objeto_2.f2(12)<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
TAREA DE POLIMORFISMO

#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;

class B { // Clase-base
public:
virtual int fun(int x) {return x * x;} // virtual
};
class D1 : public B { // Clase derivada-1
public:
int fun (int x) {return x + 10;} // virtual
};
class D2 : public B { // Clase derivada-2
public:
int fun (int x) {return x + 15;} // virtual
};

int main()
{
B b;
D1 d1;
D2 d2;
int h;
cout << "Ingresa un valor entero positivo:";
cin >> h;
cout << "El valor es: " << b.fun(h) << endl;
cout << "El valor es: " << d1.fun(h) << endl;
cout << "El valor es: " << d2.fun(h) << endl;
cout << "El valor es: " << d1.B::fun(h) << endl;

system("PAUSE");
}
//Definicin de la clase Punto
#ifndef PUNTO_H
#define PUNTO_H
#include<iostream>
using std::ostream;
class Punto{
friend ostream &operator<<(ostream &, const Punto &);
public:
Punto(int=0, int=0); //constructor predeterminado
void establecePunto(int, int); //establece coordenadas
int obtieneX() const{return x;} //obtiene la coordenada x
int obtieneY() const{return y;} //obtiene la coordenada y
protected: //accesible para las clases derivadas
int x, y; //las coordenadas x y y de Punto
}; //fin de la clase Punto
#endif

//Definicin de la clase Circulo


#ifndef CIRCULO_H
#define CIRCULO_H
#include<iostream>
using std::ostream;
#include<iomanip>
using std::ios;
using std::setiosflags;
using std::setprecision;
#include "Punto.h"
class Circulo:public Punto{//Circulo hereda de Punto
friend ostream &operator<<(ostream &, const Circulo &);
public:
//constructor predeterminado
Circulo(double r=0.0, int x=0, int y=0);
void estableceRadio(double); //establece el radio
double obtieneRadio()const; //devuelve el radio
double area()const; //calcula el rea
protected:
double radio;
}; //fin de la clase Circulo
#endif

//Definicin de la clase Circulo


#ifndef CIRCULO_H
#define CIRCULO_H

#include<iostream>
using std::ostream;

#include<iomanip>
using std::ios;
using std::setiosflags;
using std::setprecision;

#include "Punto.h"
class Circulo:public Punto{//Circulo hereda de Punto
friend ostream &operator<<(ostream &, const Circulo &);
public:
//constructor predeterminado
Circulo(double r=0.0, int x=0, int y=0);
void estableceRadio(double); //establece el radio
double obtieneRadio()const; //devuelve el radio
double area()const; //calcula el rea
protected:
double radio;
}; //fin de la clase Circulo
#endif
//funciones miembro para la clase Punto
#include<iostream>
#include "Punto.h"

//Constructor para la clase Punto


Punto::Punto(int a, int b){establecePunto(a, b);}
//Establece las coordenadas x y y de Punto
void Punto::establecePunto(int a, int b)
{
x= a;
y= b;
}//fin de la funcion establecePunto

//Despliega punto(con el operador sobrecargado de insercin de flujo)


ostream &operator<<(ostream &salida, const Punto &p)
{
salida <<'['<<p.x<<","<<p.y<<']';
return salida; //permite llamadas en cascada
} //fin de la funcin operator<<

//Definicin de las funciones miembro para la clase Circulo


#include "Circulo.h"
//Constructor para las llamadas de Circulo a Punto
//mediante un inicializador de miembros que inicializa el radio
Circulo::Circulo (double r, int a, int b):Punto(a, b) //llama al constructor de la clase base
{estableceRadio(r);}
//Establece el radio de Circulo
void Circulo::estableceRadio(double r)
{radio= (r>=0? r:0);}
//Obtiene el radio del Circulo
double Circulo::obtieneRadio()const{return radio;}
//Calcula el rea del Circulo
double Circulo::area()const
{return 3.14159*radio*radio;}
//Despliega un Circulo en la forma: Centro= [x,y]; Radio= #.##
ostream &operator<<(ostream &salida, const Circulo &c)
{
salida<<"Centro="<<static_cast<Punto>(c)
<<"; Radio="
<< setiosflags(ios::fixed | ios::showpoint)
<< setprecision(2)<<c.radio;

return salida; //permite llamadas en cascada


}//fin de la funcion operador
// Conversin de apuntadores de clases base a apuntadores de clases derivadas
#include <iostream>
using std::cout;
using std::endl;
#include <iomanip>
#include "Punto.h"
#include "Circulo.h"
int main()
Punto *ptrPunto = 0, p( 30, 50 );
Circulo *ptrCirculo = 0, c( 2.7, 120, 89 );
cout << "Punto p: " << p << "\nCirculo c: " << c << '\n';
// Trata a Circulo como un Punto (solamente ve la parte de la clase base)
ptrPunto = &c; // asigna la direccin de Circulo a ptrPunto
cout << "\nCirculo c (via *ptrPunto): " << *ptrPunto << '\n';
// Trata a Circulo como un Circulo (con alguna conversin)
// convierte un apuntador de clase base a un apuntador de clase derivada
ptrCirculo = static_cast< Circulo * >( ptrPunto );
cout << "\nCirculo c (mediante *ptrCirculo):\n" << *ptrCirculo
<< "\nArea de c (mediante ptrCirculo): "
<< ptrCirculo->area() << '\n';
// PELIGRO: Trata a un Punto como un Circulo
ptrPunto = &p; // asigna la direccin de Punto a ptrPunto
// convierte el apuntador de clase base a un apuntador de clase derivada
ptrCirculo = static_cast< Circulo * >( ptrPunto );
cout << "\nPunto p (mediante *ptrCirculo):\n" << *ptrCirculo
<< "\nArea del objeto ptrCirculo apunta a: "
<< ptrCirculo->area() << endl;
return 0;
} // fin de la funcin main

Вам также может понравиться