Professional Documents
Culture Documents
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
Todoslostextos,imgenesyvideosdeConoce3000estancolocadosbajounalicencia:
CreativeCommonsReconocimientoNoComercial3.0UnportedLicense.
http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1107Arreglos%20abiertos%20variant.php
3/3