Anda di halaman 1dari 3

//punto1.

cpp
//Definicin de las funciones miembro para la clase punto
#include"punto1.h"
Punto::Punto(int a, int b){establecePunto(a,b);}
void Punto::establecePunto(int a, int b)
{
x=a;
y=b;
}//fin de la funcion establecePunto
void Punto::imprime() const
{ cout<<'['<<x<<","<<y<<']';}

//circulo1.cpp
//Definicion de las funciones miembro para la clase circulo
#include<iostream>
using std::cout;
#include"circulo1.h"
Circulo::Circulo (double r, int a, int b):Punto(a,b)
//llama al constructor de la clase base
{estableceRadio(r);}
void Circulo::estableceRadio(double r){radio=r>0?r:0;}
double Circulo::obtieneRadio()const {return radio;}

void Circulo::imprime() const


{
Punto::imprime;
cout<<";Radio="<<radio;
}// fin de la funcion imprime

//cilindro.cpp
//Definicion de las funciones y amigas para la clase cilindro

#include<iostream>
using std::cout;
#include"cilindro1.h"
cilindro::cilindro(double h, double r,intx, int y):circulo(r, x, y)//llama al
constructor dela clase base
{estableceAltura(h);}

void cilindro::estableceAltura(double h)
{altura= h>0?h:0;}
double cilindro::obtieneAltura()[retur altura;}
double cilindro::area() const
{
//superficie del cilindro
return 2 *circulo::area()+ 2*3.14159*obtieneRadio()*altura;
}//fin de la funcion area
double cilindro::voulumen() const
{return Circulo::area()*altura;}
void cilindro::imprime() const
{
Circulo::imprime();
cout<<";Altura="<<altura;
}//fin de la funcin imprime

//Controlador para la jerarqua figura, punto, circulo, cilindro


#include<iostream>
using std::cout;
using std::endl;

#include<iomanip>

using std::ios;
using std::setiosflags;
using std::setprecision;

#include"figura.h"
#include"punto1.h"
#include"circulo1.h"
#include"cilindro1.h"

void apuntadorviavirtual(const figura *);


void referenciaviavirtual(const figura &);

int main()
{
cout<<setiosflags(ios::fixed | ios::showpoint)<< setprecision(2);

Punto punto(7, 11); //crea Punto


Circulo circulo(3.5, 22, 8); //crea circulo
Cilindro cilindro(10, 3.3, 10, 10); //crea cilindro

punto.imprimeNombreFigura(); //vinculacin esttica


punto.imprime(); //vinculacin esttica
cout<<'\n';

circulo.imprimeNombreFigura(); //vinculacin esttica


circulo.imprime(); //vinculacin esttica
cout<<'\n';

cilindro.imprimeNombreFigura(); //vinculacin esttica


cilindro.imprime(); //vinculacin esttica
cout<<'\n\n';

Figura *arregloDeFiguras[3];//arreglo de apuntadores a la clase base


//arregloDeFiguras[0] apunta al objeto Punto de la clase derivada
arregloDeFiguras[0]= &punto;

//arregloDeFiguras[1] apunta al objeto Punto de la clase derivada


arregloDeFiguras[1]= &circulo;

//arregloDeFiguras[2] apunta al objeto Punto de la clase derivada


arregloDeFiguras[2]= &cilindro;

//ciclo a traves de arreglosDeFiguras y llamada a apuntadorviavirtual


//para imprimir el nombre de la forma, atributos, area, volumen de cada objeto
mediante vinculacin dinmica

cout<<"Llamadas virtuales a funciones mediante referencias a la clase base\n";

for(int j=0; j<3; j++)


referenciaviavirtual(*arregloDeFiguras[j]);

return 0;
}// ifn de la funcion main
//Hace llamadas a funciones virtuales mediante un apuntador a la clase con el uso
de vinculacin esttica
void apuntadorviavirtual(const Figura *ptrClaseBase)
{
ptrClaseBase->imprimeNombreFigura();
ptrClaseBase->imprime();
cout<<"\nArea="<<ptrClaseBase->area()<<"\nVolumen="<<ptrClaseBase-
>voulumen<<"\n\n"";
}//fin de la funcin apuntadorviavirtual

//Hace llamadas a funciones virtuales mediante una referencia a la clase con el uso
de vinculacin esttica
void referenciaviavirtual(const Figura &refClaseBase)
{
refClaseBase.imprimeNombreFigura();
refClaseBase.imprime();
cout<<"\nArea="<<refClaseBase.area()<<"\nVolumen="<<refClaseBase.volumen()<<"\n\n";
}//fin de la funcion referenciaviavirtual