Curso de C++ Builder


Ejemplo 0



Corresponde al final de la sección 5.2.4, tras la herencia y antes de ABSTRACCIÓN.



EJEMPLO.CPP

//----------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

USERES("Ejemplo.res");
USEFORM("Ppal.cpp", PpalFrm);
USEUNIT("ObjGraf.cpp");

//-----------------------------------------------------------------------

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
   try
   {
       Application->Initialize();
       Application->CreateForm(__classid(TPpalFrm), &PpalFrm);
       Application->Run();
   }
   catch (Exception &exception)
   {
       Application->ShowException(&exception);
   }
   return 0;
}

//----------------------------------------------------------------------



PPAL.H

//----------------------------------------------------------------------

#ifndef PpalH
#define PpalH

//----------------------------------------------------------------------

#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>

#include "ObjGraf.h"
#include <Buttons.hpp>

//----------------------------------------------------------------------

class TPpalFrm : public TForm
{
__published:	// IDE-managed Components
   TPaintBox *PaintBox;
   TBitBtn *BotonSalir;
   void __fastcall FormCreate(TObject *Sender);
   void __fastcall FormDestroy(TObject *Sender);
   void __fastcall PaintBoxPaint(TObject *Sender);
   void __fastcall BotonSalirClick(TObject *Sender);

private:	// User declarations

public:		// User declarations
   __fastcall TPpalFrm(TComponent* Owner);
};

//----------------------------------------------------------------------
extern PACKAGE TPpalFrm *PpalFrm;
//----------------------------------------------------------------------

#endif



PPAL.CPP


//----------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Ppal.h"

//----------------------------------------------------------------------

#pragma package(smart_init)
#pragma resource "*.dfm"

TPpalFrm *PpalFrm;

// Punteros a objetos de las clases derivadas.

TCirculo  *Cir1,  *Cir2;
TCuadrado *Cuad1, *Cuad2;

//----------------------------------------------------------------------

 
__fastcall TPpalFrm::TPpalFrm(TComponent* Owner) : TForm(Owner)
{
}

//----------------------------------------------------------------------

 
void __fastcall TPpalFrm::FormCreate(TObject *Sender)
{
   Cir1  = new TCirculo  (PaintBox, clBlack,  100, 100, 30);
   Cir2  = new TCirculo  (PaintBox, clGreen,  210,  40, 20);
   Cuad1 = new TCuadrado (PaintBox, clRed,    200, 150, 45);
   Cuad2 = new TCuadrado (PaintBox, clYellow, 120,  70, 25);
}

//----------------------------------------------------------------------

void __fastcall TPpalFrm::FormDestroy(TObject *Sender)
{
   delete Cir1;
   delete Cir2;
   delete Cuad1;
   delete Cuad2;
}

//----------------------------------------------------------------------

void __fastcall TPpalFrm::PaintBoxPaint(TObject *Sender)
{
   Cir1->Mostrar();
   Cir2->Mostrar();
   Cuad1->Mostrar();
   Cuad2->Mostrar();
}

//----------------------------------------------------------------------

void __fastcall TPpalFrm::BotonSalirClick(TObject *Sender)
{
   Application->Terminate();
}

//----------------------------------------------------------------------



OBJGRAF.H


//----------------------------------------------------------------------

#ifndef ObjGrafH
#define ObjGrafH

//*************************************************/
// Definicion de la clase base TObjGraf
//*************************************************/

class TObjGraf {

public:

   int X;               // Propiedades
   int Y;
   TColor      Color;
   TPaintBox   *PaintBox;

   // Constructor de objetos TObjGraf

   TObjGraf (TPaintBox *_PaintBox, TColor _Color=clBlack, 
             int _X=0, int _Y=0);

   // Otros metodos

   virtual void Mostrar (void) = 0; // Metodo virtual puro

};

 
 
//*************************************************/
// Definicion de la clase derivada TCirculo.
// Deriva de la clase base TObjGraf
//*************************************************/

class TCirculo : public TObjGraf {

public:

   int Radio;

   // Metodo constructor

   TCirculo (TPaintBox *_PaintBox, TColor _Color=clBlack,
             int _X=0, int _Y=0, int _Radio=1);

   // Instanciacion del metodo virtual puro de la clase TObjGraf

   void Mostrar (void);

};

//*************************************************/
// Definicion de la clase derivada TCuadrado.
// Deriva de la clase base TObjGraf
//*************************************************/

class TCuadrado : public TObjGraf {

public:

   int Lado;

   // Metodo constructor

   TCuadrado (TPaintBox *_PaintBox, TColor _Color=clBlack,
             int _X=0, int _Y=0, int _Lado=1);

   // Instanciacion del metodo virtual puro de la clase TObjGraf

   void Mostrar (void);

};

//----------------------------------------------------------------------

#endif


OBJGRAF.CPP


//----------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "ObjGraf.h"

//----------------------------------------------------------------------

#pragma package(smart_init)

/*****************************************************/
// Metodos asociados a la clase base TObjGraf
/*****************************************************/

TObjGraf :: TObjGraf (TPaintBox *_PaintBox,
                      TColor _Color, int _X, int _Y)
{
   PaintBox = _PaintBox;
   Color = _Color;
   X = _X;
   Y = _Y;
}

 
/*****************************************************/
// Metodos asociados a la clase derivada TCirculo.
// TCirculo deriva de la clase base TObjGraf.
/*****************************************************/

TCirculo :: TCirculo (TPaintBox *_PaintBox, TColor _Color,
                      int _X, int _Y, int _Radio) :
            TObjGraf (_PaintBox, _Color, _X, _Y)
{
   Radio = _Radio;
}

// Instanciacion del metodo virtual puro de la clase TObjGraf

void TCirculo :: Mostrar (void)
{
   PaintBox->Canvas->Pen->Color = Color;
   PaintBox->Canvas->Brush->Color = Color;
   PaintBox->Canvas->Ellipse(X, Y, X+Radio*2, Y+Radio*2);
}

/*****************************************************/
// Metodos asociados a la clase derivada TCuadrado.
// TCuadrado deriva de la clase base TObjGraf.
/*****************************************************/

TCuadrado :: TCuadrado (TPaintBox *_PaintBox, TColor _Color,
                        int _X, int _Y, int _Lado) :
            TObjGraf (_PaintBox, _Color, _X, _Y)
{
   Lado = _Lado;
}

// Instanciacion del metodo virtual puro de la clase TObjGraf

void TCuadrado :: Mostrar (void)
{
   PaintBox->Canvas->Pen->Color = Color;
   PaintBox->Canvas->Brush->Color = Color;
   PaintBox->Canvas->Rectangle(X, Y, X+Lado, Y+Lado);
}



Atrás