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
© Francisco Cortijo Bon