Pero ¿qué ocurre si nuestra clase (objeto) tiene métodos virtuales? Entonces recordemos que era necesario un método constructor, que se ejecute antes que ningún otro. En nuestro caso es evidente que nos conviene que el constructor sea el "init".
El programa queda ahora
{--------------------------}
{ Ejemplo en Pascal: }
{ }
{ Objetos y punteros-2 }
{ OBJETOP2.PAS }
{ }
{ Este fuente procede de }
{ CUPAS, curso de Pascal }
{ por Nacho Cabanes }
{ }
{ Comprobado con: }
{ - Free Pascal 2.2.0w }
{ - Turbo Pascal 7.0 }
{--------------------------}
program ObjetosConPunteros2;
uses crt; { Usaremos "GotoXY" y TextAttr }
type { Aquí definimos nuestro objeto }
titulo = object
texto: ^string; { El texto que se escribirá }
x,y : byte; { En qué posición }
color: byte; { El color, claro }
constructor init(TextoInicial: string); { Inicializa }
procedure FijaCoords(nuevoX, nuevoY: byte); { Pues eso }
procedure FijaTexto(mensaje: string); { Idem }
procedure FijaColores(pluma,fondo: byte); { y lo otro }
procedure Escribe; virtual; { Lo escribe, claro }
procedure done; { Libera memoria }
end;
{ --- Desarrollo del objeto Titulo --- }
constructor titulo.init(TextoInicial: string);
begin
new(texto); { Reservamos memoria }
texto^ := TextoInicial; { Damos valor al texto }
x :=1 ; y := 1; { Coordenadas por defecto }
color := 7; { Gris sobre negro }
end;
{ [...] }
{ (El resto no cambia). }
Tampoco hay problemas, ¿no? Pues ahora vamos a rizar el rizo, y vamos a hacer que el propio objeto a su vez sea un puntero. No voy a repetir el motivo por el que nos puede interesar, y voy a centrarme en los cambios.