0% encontró este documento útil (0 votos)
286 vistas7 páginas

Cilindro Programado

Este documento presenta varios ejemplos de herencia en C++. En el primer ejemplo, la clase Cilindro hereda de la clase Circulo y agrega un atributo largo. El segundo ejemplo muestra la herencia de la clase Cubo de la clase Cuadrado. Un tercer ejemplo ilustra el uso de polimorfismo al sobreescribir el método f1() en la clase derivada Dos.

Cargado por

Benji Price
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
286 vistas7 páginas

Cilindro Programado

Este documento presenta varios ejemplos de herencia en C++. En el primer ejemplo, la clase Cilindro hereda de la clase Circulo y agrega un atributo largo. El segundo ejemplo muestra la herencia de la clase Cubo de la clase Cuadrado. Un tercer ejemplo ilustra el uso de polimorfismo al sobreescribir el método f1() en la clase derivada Dos.

Cargado por

Benji Price
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

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

También podría gustarte