You are on page 1of 3

15/10/2015

Conoce300::PascalconFreePascal::IntroduccinalaprogramacinorientadaaobjetosII::Arreglosabiertosvariant

LENGUAJESDEPROGRAMACIN

PASCALCONFREEPASCAL
TrabajaenCocaCola

Accedeasusofertasdeempleo.
Checalasvacantesypostlate.

11.IntroduccinalaprogramacinorientadaaobjetosII.

11.7.Arreglosabiertosvariant.

anterior::indice::siguiente

11.1.Excepciones.
11.2.Propiedades.
11.3.Mtodosabstractos.
11.4.Referenciasdeclase.

11.5.Solapamientodeobjetos,operadoresisyas, 11.7.Arreglosabiertosvariant.
yelmtodoclasstype.
11.8.Preguntasyejercicios.
11.6.Atributos,propiedades,mtodosdeclasey 11.9.Respuestaalaspreguntasyejercicios.
mtodosestticos.

Cuandoseusaelmodoobjfpc,freepascalsoportaenlasrutinasymtodos,parmetrosarreglosabiertosvariant,queeningles
sera:variantopenarrayparameters.
Esteesuncasoespecialdearreglosabiertos,dondeestepermitecolocarcualquierelementoenunarregloypasarloaunmtodo
o rutina. Los elementos deben ser tipos de datos enteros, booleanos, caracteres, Enumerados, subrangos, Reales, cadena de
caracteres,punteros,clasesyobjetos.
Loselementosdeunparmetroarregloabiertovariant,estnasociadosaunregistroquenospermiteobtenerelvalorcolocadoen
el parmetro. Es decir un elemento de un parmetro arreglo abierto variant es un registro, en donde un campo nos permite
identificarsutipoyelotroobtenerelvalorcorrespondiente.ElcampovtTypenospermitirsabercualeseltipodedatocolocado
enelarreglo,elcualdebemoscompararconunodelassiguientescontantes:

Identificador

Uso

vtInteger

Parauntipodedatointeger.

vtBoolean

ParauntipodedatoBoolean.

vtChar

ParauntipodedatoChar.

vtWideChar

ParauntipodedatoWideChar.

vtExtended

ParauntipodedatoEextended.

vtString

ParauntipodedatoString.

vtPointer

Paraunpuntero.

vtPChar

ParauntipodedatoPChar.

vtObject

ParaunObjeto.

vtClass

ParaunaClase.

vtPWideChar

ParauntipodedatoPWideChar.

vtAnsiString

ParauntipodedatoAnsiString.

vtCurrency

ParauntipodedatoCurrency.

vtInt64

ParauntipodedatoInt64.

vtQWord

ParauntipodedatoQWord.

Es decir si queremos saber si el elemento 3 de una lista X de elementos, tiene el tipo de dato entero, entonces usaremos lo
siguiente:

ifX[3].vtype=vtIntegerthenWriteln('EsunEntero')

Paraobtenerelvalorcolocadoenunelementosedebeusarunodelossiguientecampos,segnseaelcaso:

Campos
vInteger

Uso
Parauntipodedatointeger.

http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1107Arreglos%20abiertos%20variant.php

1/3

15/10/2015

Conoce300::PascalconFreePascal::IntroduccinalaprogramacinorientadaaobjetosII::Arreglosabiertosvariant
vBoolean

ParauntipodedatoBoolean.

vChar

ParauntipodedatoChar.

vWideChar

ParauntipodedatoWideChar.

vExtended

ParauntipodedatoEextended,sedebeusaruncircunflejo,yaqueesteescampoesun
punterodetipoExtended.

vString

ParauntipodedatoString,igualsedebeusaruncircunflejo,yaqueelcampoesunpuntero
altipodedatoString.

vPointer

Paraunpuntero.

vPChar

ParauntipodedatoPChar.

vObject

ParaunObjeto.

vClass

ParaunaClase.

vPWideChar

ParauntipodedatoPWideChar.

vAnsiString

ParauntipodedatoAnsiString.

vCurrency

ParauntipodedatoCurrency,tambinsedebeusarcircunflejo.

vInt64

ParauntipodedatoInt64,tambinsedebeusarcircunflejo.

vQWord

ParauntipodedatoQWord,tambinsedebeusarcircunflejo.

Losparmetrosarreglosabiertosvariant,sontilescuandonosesabedeantemanoqueesloquesevaacolocarenelarreglo.El
siguienteprogramaesunejemplodecomosepodra,usarestetipodeparmetros:

{$codepageutf8}
{$modeobjfpc}
USESsysutils;
TYPE
TClassAvion=CLASSOFTAvion;
TAvion=CLASS
CLASSVAR
FAviones:integer;
VAR
Nombre:Unicodestring;
CONSTRUCTORcreate;
CLASSFUNCTIONObtAviones:integer;static;
CLASSpropertyaviones:integerreadObtAviones;
PROCEDUREDespegar;virtual;abstract;
END;

TAvComercial=CLASS(TAvion)
PROCEDUREDespegar;override;
END;
TAvGuerra=CLASS(TAvComercial)
PROCEDUREDespegar;override;
END;
TEscenario=CLASS
Ref:TClassAvion;
A:ARRAYOFTAvion;
PROCEDUREGenerarAviones(Aviones:ARRAYOFCONST;
Tipos:ARRAYOFTClassAvion);
END;
CONSTRUCTORTAvion.create;
BEGIN
inheritedcreate;
Faviones+=1
END;
CLASSFUNCTIONTAvion.ObtAviones:integer;
BEGIN
ObtAviones:=FAviones
END;

PROCEDURETAvComercial.Despegar;
BEGIN
Writeln('DespegandoAvionComercial'+Nombre);
END;
PROCEDURETAvGuerra.Despegar;
BEGIN
Writeln('DespegandoAviondeGuerra'+Nombre);
END;
PROCEDURETEscenario.GenerarAviones(Aviones:ARRAYOFCONST;
Tipos:ARRAYOFTClassAvion);
VARi:integer;
nombre:unicodestring;
BEGIN
setlength(A,length(Aviones));
IF(High(Aviones)>0)AND(High(Aviones)=High(Tipos))THEN
BEGIN

http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1107Arreglos%20abiertos%20variant.php

2/3

15/10/2015

Conoce300::PascalconFreePascal::IntroduccinalaprogramacinorientadaaobjetosII::Arreglosabiertosvariant
FORi:=0TOHigh(Aviones)DO
BEGIN
CASEAviones[i].vtypeOF
vtinteger:nombre:=IntToStr(Aviones[i].vinteger);
vtextended:nombre:=FloatToStr(Aviones[i].VExtended^);
vtchar:nombre:=Aviones[i].vchar;
vtPChar:nombre:=Aviones[i].VPChar;
vtansiString:nombre:=ansiString(Aviones[i].VansiString);
vtUnicodeString:nombre:=
UnicodeString(Aviones[I].VUnicodeString);
vtString:nombre:=Aviones[i].VString^;
vtInt64:nombre:=IntToStr(Aviones[i].vint64^);
vtQWord:nombre:=IntToStr(Aviones[i].vQword^);
ELSE
nombre:='Desconocido'+IntToStr(Aviones[i].vtype);
END;
A[i]:=Tipos[i].create;
A[i].Nombre:=nombre;
A[i].despegar;
END;
END
ELSEWriteln('Faltanavionesosustiposcorrespondientes')
END;
VAREscenario:TEscenario;
BEGIN
Escenario:=TEscenario.create;
Escenario.GenerarAviones([78,'Falcon',89.45,'F11A'],
[TAvComercial,TAvGuerra,TAvComercial,TAvComercial])
END.

Cdigofuente23:Ejemplodelusodeparmetrosarreglosabiertosvariant.

Recomendar

Tweet

anterior::indice::siguiente

SUGERENCIAS

"Agradezco que se tomen su tiempo, para escribirme una sugerencia. Toda sugerencia que me
escribameayudaamejorarloscontenidosdelawebacordeasusnecesidades.Lassugerencias,se
recibirn siempre y cuando ingrese al menos su nombre o seudnimo y la sugerencia. Las
sugerenciassondeusointernoynosernpublicadasenlawebConoce3000"

Nombreoseudnimo

CorreoElectrnico

Sugerencias

Deseorecibirunacopiadelmensaje.

Enviar

PORTADA| LIBROS| APUNTES| ARTCULOS

Todoslostextos,imgenesyvideosdeConoce3000estancolocadosbajounalicencia:
CreativeCommonsReconocimientoNoComercial3.0UnportedLicense.

http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1107Arreglos%20abiertos%20variant.php

3/3

You might also like