You are on page 1of 286
Aprenda Microsoft Visual C++ 6.0 Ya Chuck Sphar - Capitulo El entorno de Visual C++ Puede utilizar Microsoft Visual C++ 6.0 para escrbie evlavier tipo de programma {que se pueda escribir er.C o en C++. Sin smoargo, el caso es que conpr® Visi (Cr para programar aplicaciones sara Microsoft Windows er C++. Siasie, tine Jas herramientss adecuadas e lenguaje C++, que es un superconjuno de C orien {ado a objetos. 1a Microsoft Founlation Class Library 60 (MEC, o ls biblioteca MEC para abreviar), que amplia mucho sv eapacidad de escribir para Windows y cl emomo de desarrollo de Visus! C++; y po" dltimo, pero no menos importane, este libro. El entoro de desarollo integado de Visral C++ (IDE) proporciona faciliéa- des para administar cada estado de su programa, desds la ereacién del cédizo fuente ala consiruccin (compilado y enlazaco) del c6dizo, proba, depurar y 0>- ‘imizar el cédigo. En ese capitulate preperars para realizar cl trabajo manual que viene en los capitulos siguientes, echando un vstazo general alentorna de desarrollo 4e Visual C++, enfatizando las t:nicas pricteas que faciltan la programacién. Este capitulo se centra en los siguientes componentes del IDE de Visual C+: ‘= El sistema de Ayuda en lite que ulza para encontrar informacién sobre cl IDE, ls lenguajes C y C++, y ls clases y funciones disponibles en kas bibliotecas de cédigo, com por ejemp o la biblioteca MFC. 1m Proyectos y espacios de tmbajo, que le ayudarin a acministrar programas ‘grandes que tienen maltiples archivos de cédigo fuente ‘= El sistema de generacién, em el que ecmpila y enlaza los a ddos para generar el programa ejecutibe, © Los asistentes y ctras herramientas que simplific de los archivos de cédigo y recursos. os adecus- Ia generacin y edict 4 APRENDALICROSOFT /SUAL C++ 80.YA ‘Abarcaremos macho terreno ripidamente en este capitulo, asi que recuerde des cosas: Primero, vowerd a ver Ia mayor parte de estos temas o¥a vez, con més ‘etalle, Segundo, Ete es un libro arctica, pido insistentemene que intent las ‘cons por su cuente sepin vaya leyendo. Igual que el mejor métofo para aprender francés esviviren Francia, el mejor métodopara aprender Visual ++ es utilizar. EJECUCION DE VISUAL C++" ‘Una ves que haya instalado Visual C+ sigaiendo las instrcciones de la Introds- cign deeste lity, suede ejecutaro desde el ment Inicio de Windows. Sign esos pasos pata ejecutar Visual C+: 1. Haga elie e1 inicio en Ia barra de tareas de Windows. i 2, En el menGnicio, hag clic en Programas. 3. Haga clic en Microsoft Visual C++ 6.0. (Si instal Vistal C++ como un producto axténomo, aparece como Microsot Visual C++ 6.0 en el ment | Programas. Silo insala como parte de Microsoft Visual Sno, Visual C | se listara byjo Visual Studio 6.0 enel mend Programas.) 4. La Figura 1 muestra la ventana abierta de Visual C+ con un programs que se esta visualizando, Su ventana todavia no tendrun programa en ela Porque no Yemos especificado un programa, 7ero queria mostrarle la ven~ tana de Visual C++ en todo su espiendor. ‘Consejs:_ Cuando abre Visual C+, una ventana Tip Of The Lay vsualiz un conse riches, Puede vtiear el batan Nest Tp para visualizer as consyos, o puede hacer cc Close y ponerse» trabajar Inc deseo ve los consts cado vez que empieze Visual Cae tedeleetone el cuadro'de comprobacan Show Tips At Startug antes de cera ‘rentana Tip Of The day. Siempre purde vsualear consejos de nueo seleccionando Tip Of ‘he Cay en ol menaHelp de Visual C+. Resta dtl dear actived> Th OF The Day mien- tras snc novatode Visual C++ : Um vee que Haya ejecutado Visual C++, debe generar un sroyecto 0 cargar ‘uno existente, Vessmos los proyectos desrués de echar un breve vistazo al sistema de aywda en linea 5 T pow del aducor) Micros Vs] C+ 60 se dst dic y xtsivamente 2 xl quiere un eon on mpl pr I gue oh de ode Wb ve referencias omens ELENTORND DE VIUALEH+ pecan ee a Figura 1.1. Elentorno e Visual 1+ vsualzardo un programa. OBTENER AYUDA EN VISUAL C++? Es tradicional abordar esta seccitx al final de! primer apitul de un lito o, inclu 0, relegarla para el apéndice, Per> Visual C++ es un producto grande y su sistema de ayuda es tumbién muy grands drdenes d: magnitud més grande que el sise- sma de ayuda de Windows 95, por ejemplo. Utlizard Ia ayuda todo el tiempo, asi ‘que es primoidial que aprenda sSmo resrirgir sus bisquedas y cdmo dejar an rast de migss de pan y localiza su luger a el mapa, (Coasulte «Perdido en el bosque» mas adelante en este caitul,) Primero, vamos a ver eémo controlar qu’ componestes de la ayuda se ins lan en el discoduro y mirar brevemente cémaesté organizade el sistema de ayuda ‘A continuaci6a partienos de eer para uilzaro efieazment, ‘Ayuda grande, ayuda pequefia Si utliza la Edicibn de Apreneizaje de Visual C++ la Ayuda consste sélo cen os temas de Visual Cr, eamo podria esperar. Pero si miliza ota version de Visual C++ (Ja versin inckida en los froductos Microsoft Visual Studio oti) “et cr) Ls Ata eo il Cs 60 ence ing de esti in adi Verk gu as pars qe Te inden gue os ‘race, oem ena se ning 6 Ayuda grande, ayuda pequefa (costinuacisr) © las ediciones auténomas Standard, Professional o Enterprise), el sistema ‘de Ayuda contiene temas para todas ios productos Visual Stuco,incluyendo Visval Basie, Visual InterDer, Visual ++, Visual FoxPro, Visual Source Safe, la Interfax de Programacion de Aplicacion Ge Windows (API), y ris, ‘Todi esta Ayudh est junta en una tbls de contenidos, un incice y un siste- ims de bisqueds, Esto significa que cualquier inento de enecnirar informa idm especifea sobre Visual C++ puede hacer aparecee teas que no tiesen ras que ver eon Visual C++, Por lo que si utiliza una de as otras versiones de Visual C++, necestar algunas estrategias de Ayuda que van mas all de Jo gue funcionapara la Edicidn de Aprendizaje primero, cusndo instala Visual C++, puede expecificar qué componertes de Ayuda deseacargar en el disco duro para acceder a ellos mas ripidamente ¥y culles dezea dejar en el CD para un acceso més lento, feroconsumir me- ios del valioso espacio del disco duro. Para la Edicién de Aprendizaje. la ‘Ayuta simplemente te instala cuando istala Visual C+, pre pa las ots ediciones tine varias elecciores: 1 La opci6s Typical en Visual C+ Setup insiala un pumero minimo de archivos en el disco duro, dejanco la bibl cteca Miroft Developer Network (MSDN) en el CD. Deberi dejar -nsertado el CD en la uni- dad micsras programa, La opcié Custom en Setup le permite espeificar qué partes de MSDN Help instilaen el disco duro. Toéavia vers ta tabla completa de conte- nidosy 3 seleceiona us tema que todavia estéen el CD, se le pecira ‘que insert el CD. Segundo, deberé poder localizar un ema que no sea aplicable, como. 20r ejemplo, uno pera Visual Basis en lugar de Visual C+. Puede normalmente indivar la difermeia, ero no siempre. Examine los temas 4e ayuda con cui- ddale para obterer referencias a productos especticos.o para estlos de fre~ sentacién de fenas que ha logrado reconocer. Merece lz pena explorar la ‘Ayala simplemente para obtener una impresion de este problema, ‘Tercera. deseri eliminar hs partes de Ayuda que no le ayudarin, Puede centar las bisquedas en la Ayuda a subconjuntos de docume tacion, En las versiones avansadas de Visual C++ pusde definie un subson.unto que con= {eng las partes designadas de la documentacién. Cuando seleciona un sab- conpnto, las bisquedts siguientes se resringen ales docurien os del sube jun El suscoxjunto se apes alas pestaias Contenido, Indice y Busqueda are aprender mas sobre los subconjuntos, busque ayuda (en a Professional ‘0 Erterprise Ed tions de Visual C++) sare subse, Seleccionecl primer tema cen a lista: «Crating and Using Subset» ELENTORNG DE VISUNLC#4+ 7 Fundamentos de Ayuda Hay cuatro motos de obiener ayua mientras programa con Visual C+. Cada uto de los enfoques siguientes (excepto Ayuda F) se represents en Ta ventana Help ‘como una pestaa sobre la que parde hacer cic. 1 Ayuda 1. Este ese! modomsrpido de obtener ayuda, Simpemente haga licen una palabra, reslte una frase ohaga clic en ue mensee de error y pulse 1S la palabra clave frase end =n el indice de Ayuda, xe arid eh tema paella nh mayor pte dees casos. Puede liza AYata Fen ura ‘ventana de edison de cddigc Fuente, ane ventana Ayuda la vertna Output 1 El indies de ls Ayuda. Como un buen ibro a Ayadaiene un gran inde. [No es perfecto. No encont todo lo ue bisque, pre mucho s Utilise a pestaa index en la ventane de Viseal C++ (de agui en adelante conocia omo a ventana Ayuda) anes de intear otros enfogues de bisqueds, ex cept poe Ayuda 1= El mecanismo de bisqueds de texto completo, La ayuda est en linea, 4 «que pucde Buscar hasta er el ltimo recoveco del texto en el sistema de “Ayuda, Mientras gue el ince le permite apuntar cuicadosamente, la bis- {queda es mis como un diparo de piwola. Puede qus haga aparccetm temas intelevantes, asi coma os que necesita, pero algunas voce ese nico metodo gue funciona, espeatmente siel indice le fall. Aforunadamente, puede poner a punto st bisqueda de cversos modos, como veremos mas fdelante en el capitulo 18 La tabla de contenidos. De nuevo como un libro, la Ayuda tere una tabla claboradh de contenidos.Uilice la pega Contexido en la ventana Ayn 4s cuando dser leer todo arcade un tema, Es como lero ech una oat ‘tun libo cuande el tema es nuevo o se siete osidado, Encontrar donde ‘mpetacen la tabla de contnidospacce ser engatoso ask gus algunas ve= {es necesita una combinoxin del nde, bisquedey mecanisnos de com tenidos para que fancione Abrir la ventana Ayuda Haga clic en Contents, Search o Index en & mani Help de Vis ventana Ayuda con la pestaia seleccionad abierta C4 Eso abr la Nota: La ventana Ayudaya no es wa ventana integral dentro dea ventana principal de Visual C++ paral version6 0, comolo fue para unas cvantas verses antevores. Aas la Aya se ejecta como un prograra separado suze su propa ventana” * (ots del weductr) Camo la venta Aya qu aparece lpi apd en nen Help de ‘Vinal C1 +n depend lero de pogratacin e Mico sin sel sister operative ae ‘eet en sign, ea entan spureers,nomalente, em eral, To gue be elere s 1a mama se han con palabra en egal. [APRENOAMICROSO-TVISUAL C++ 6.0 YA ‘Navegar en la ventana Ayuda Microsoft utiliza te tecnologia de explora:ién Web de Internet Explorer para vi- Sualisar los temas de Ayuda como documentos de Lenguaje de marcas de hiper- texto CITML) dindole la Ayuda el aspecto del World Wide Web, 1m ‘tlie ‘as pestatas Contenido, indice y Biscueda en el panel de navega- in en la pate izquierda dela ventana para locaizar los temas. 1m Jaga clic er los enlaces de hipertextn (también llamades hpervinculos,sub- ayados en ul por defecto) en el panel de visalizacin ce temas ala de-e- sha part exmplorar los temas relacionados. Les enlaces cue ha seguido se ‘uelven merados (por defecto), 15 Uslice a fia de hipervinculos que aparece por debaje de titulo en muchos ‘mas ns elaces alas vistas generale, temas.como hacerlo, preguntas mis frecuentes, ana pigina de inicio local para el area de tema y, posiblemente, los ejemplos de cddigo y otros temas ities. 18 Uiilice las Techas Atris y Adelante en Ia barra de herramientas de Ayuda para volvera trazar st camino a traves de una serie de temas. 18 Si se pictde, uilce e1 botin Inicio de la barra de hemamientas para Mezar ‘un Tugar de partida conocido: Ia pgina de inicio para el sistema Ayu fla, Desde chi puede ira cistntos sitios dentro dela dovumentacion de Vi sual C+. 18 Haga cic ne bot6n Inicio, &consinuacién en otros enlices para trazar Ia cadena de ht documentaciin a taves de la Ayuda de Visual C+ Para conectarie a un sitio en el We, haga una de estas cos ts Haga clic ev un URL (direceibn Web), 1 Seleccione un URL en el mena Iray teclee wa URL en elcuadro de disloss URL que aparece. f= Vuelva.a Ia ventana Visual C+ seleccione Microsoft On The Web es © meni Help. y seleceione una de fas opciones que aparecen en el subment Los temas Web se visualizan en Ineret Explorer. en [Bxplcre la Ajuda, Haga clic en las pestatas indice, Bisqueda y Contenido, Fxa ‘mine unos cuantes temas uilzando estas pestaias. Sign algunos enlaces, Vuela ‘ase. Baje por la jerarqula de paginas de inicio. Conéctese en Enea. eLentoRNo oe VISUALCHs 9 Consejo: Visual C++ inuye las bblotecas de ciligo de MFCy Active Template Libray ‘ATU. A menudo obtendrs temas sob un cuando Busque tomas sobre eer. Esto lamentable, porque as dos bibliotecis tienen eementos nombado: de forma muy smlr ‘inomalmente, no ls utizajunts. Tenga euidad. Los nombres delascses ATL ro ‘omienzan con laletraC come fos norbres de as cass de MFC Nose preoaipe ses > "he sentido obera mismo, Pero fo tedrd Afinar la busqueda Es ficl ser demasiado general ena Ayuda de Visual C+, tanto en la pestaes lndice como en Busqueda. Con un poco de paciencia, puede afinar mucho su bis queda Poner a cero el indice La pstaa indie es oma e indice de un libro y buscar end la misma forma, uiltzando palabras clave y fase, “omo con cualquier indice de Ibe, puede sit plementedesplaarse a tavés de lnpestaalcic y esperar dar con alg itil Pero tVindos de Vial C+ ov enor con mistor miler ds entrada, af Que, noe taliente, comprueba cl Indice de Ayuda adiinando Tas palabras cave, teceat~ dolas en el cuadro Eseritala palabra clave a bascary exporando Tos resultados. 81 ss palabra clave est en lindce, sparece en parte superior del panel ms in Tir en a pest Indice. El tema temas al gue conduc puede que sean impor- tants o ties, o puede que no. Aga tiene sg.nos mesos de sumentarsus posit Tidades de conceirase en os temas imponartes: 1 Utilice palabras clave mas especiicas, ror ejemplo, «creating ActiveX con- trols» (cinco temas encontdos) en lugar de «ActveX control» (siete te ‘mas, dos de los cules son irelevantes). Hay un movim ento ene equipo de nas mis imortantes que his otras. No es un azcidente que Ia pestaa indice le permita ver veinte entradas aprosimadamnte al mismc tiempo con el a mai predcterminado de la ventans Ayuda. Tambiér puede maximizar la Nentana Ayia para Ver retUso mas lstados de una vez 1 Intente los sndnimos u otras palabeas estrechamente relcionadas:seiul- ation, files, storing data, storing objects, writing toa fe, persistence. Si luno no funeiona, tro puode que fo haga. Los buenos incexadores intentan pensar en bas las palabras posibles que puede utilizar para encon:ar un ema, asi gue la mayor parte de Tos temas estan indexados por cinco o diez palabras dierentes 1 Intente varieiones de sus palabras de bissqueda: use, usng, working with work, ereaang, create [Nadie puede crear el indice perfecto, pero pensando un poco puede hacer me~ {or usw de lo que esti disponible. onsgo: La pes indice ess mao puesta par afar aia ave con Serta en su primera extrategi, anes de recur h pestaho Busqueds ola peste Contigo. Afinar con la gestaha Bisqueda La pestaiia Bisqued de la Ayuda esta diseRiada para encontrar. en cualqusr sito, {de ls documertacn, ead apaiciin de Is palabra palabras que introduzca en el ‘cuacen llamado EScriba qué palzbras buscer. De este modo se invoca una bisque- {dade texto ecmpleto. Normalmente, la pestala Bisqueda devuelve un gran nime- ELeNTOMO DE VISUALS 11 +o de temas, a menudo cientos o ailes de temas, # no ser que trabaje afinando = bisqueds, onijo; primer med de afr ana Buel ellos Birgu 0 despot ae haber nested con apstane de i ‘Cuando recurra a la pestaa Bisqueda intente que algunas de la éenicas si- {uientes se centren en el tema des:ado: = Basqueca de resultados de una basqteda anterior. Para hacer esto, bus- {que una vez, a costinuacién gjuste la opci6n Buscar en anterires para res- ‘wing la Bisqued: siguiene a esos temas ya encontrados. Puede continusr afinando la bisqueda de este modo pars vatias vuelta, '= Buscar sélo los titlos. En lugar de buscar el texto entero de tedos los te- as disponibles, busque sly denteo de los titulos justando la pein Bur- car lo itulos. Este enfogu>tiende a presentar més tenas relacionados, = Formule sus consultas de oisqueda cuidadosamente. Uilie los signes 4e interrgacién para buscar una frase exacta. Si busca la entrida dowbhe ‘quotes, éescubre cualquier ema que ccatenga cualquier palabra, double o (quoter, mientras que si buses de udoubl= quotes» (incluyendo lx comillas), encuentra temas que conteran esas dos palabras en ese orden. Eneerrando la frase entre comills,redeze el numer de temas encontrados de 59 a 3 (En esta bisqueda, no tuve ainguna de as tres opciones en la parte inferior de la pestana seleccionada} jlaténteio! 1 Utlice comodines. * se co-esponde cen algin caricter y ? se corresponde «on un solo eardeter, como en MS-DOS 1 Utilice les operadores bosieanos AND, OR, NOT y NEAR. La consuls (CFile NEAR close busca lz palabra CFile dentro de ocho palbras de bx Palabra close. Los operadors booleancs le permiten construireriteios de boisquede muy precisos. La consulta CFile AND (close OR opes) NOT se- rialization, por ejemplo, busca CFile ex el mismo tema con closed u open siempre que el tema no inchya la palabra serialiation, Esta consulta er~ cuentra 42 temas. En este eso, los parintesis alrededer de la eiusula OR clariican por completo sus ntenciones ‘= Usilce un subconjunto si ssté utilizardo Ia Ayuda para Visual C+ 60 Professional o Enterprise Edition. Lo: subconjuntos 0 estin disponibles en la edisi6n Introductory. Los subonguntos restringer la bisqueda a ura parte de la docurentacién (Consult kt seecién anterior «Ayuda grand: ‘Ayuda pequefian para obtea:r mis informacion.) 2 [APRENDA MICROSCFT VISUAL C-+ 6.0 YA i Puede combirar muchas de estas tenicas. Tiene a su disposicién informacién detalada sobre ctmo perfeccionar consulias en la pestaia Contenido en Ia Ayuda, ‘bajo Welcome Te The MSDN Viewer Help. Mire bajo MSDN Library Help. Inténtelo ahora Intext Ia siguiente busqueda de texto completo, wilizando la 2staa Bisgueda Teele: CFile ANO (clase OR epen) NOT serialization. & coxtinuacién teduzca ‘mis Is bisqusdaseleccionando el cuadro Buscar er anterieres en la pestaia Biis- ‘quede y busque ‘close member functions (con las comillsh “"Citintos tonms aparecen? Vuelva a empezar con la primera busqueda y dese- teccine Buscar en anteriores. Desde Tos resultados de bisqueds iniciales, sive otra vez close menber function :0n Busearen anteriores selzcconads, pores as ‘comiflas, {Cuénts temas aparecen? Percido en el bosque Cone la Ayuda ss tan grande, sbarcar los miles ce paginas de documento (y muchas ms si tiene una version que no sa Visual C+ 6.0 Edicion de Aprendia- je). puede perdese. Ademés, puede que encuentre justo elterma adecuad hey. ¥ {que bin asi sea neapaz de encontrar el camino ce vuelta al t2ma mafiana, Aqui tiene algunas estategias para alrontar estos problemas, Esti aqui: el botén Buscar {Percido? Haga slic en el botén Buscar en la barra de heramientas Ayuéa. Esto fibre a pestata Contenido en la ventana Ayuda y lemuestra dande esta ubicaco {ema que visaaliza actualmente dentro de todo el conjunto de decumentacion, #st0 | tes como ver la fiase «Esté aquis en un mapa de un centro srrereial, tra rasa t YYahs descrito ¢ botn Inicio de la barr: de herramientas y la pigina complet de enlaces ala que lleva, Puede utilizar esos enlaces como otro modo de navegar al | torent de doc mentacion.Inéntelo. 4 Deje un rastre de migas: la pestaia Favoritos ‘Cuardo hays encontrado un tema que sabe que deseard volve: a vsitar,guandelo ‘come un favorit, igual que lo haria en el Web, Cuando ya no sea un favorito, puede borralo ce la pestafia Favoritos en la ventana de Ayuda, 1 Para aad el ema acta la esa Favoritos, haga ce en Agrepen It pestafa Fivoritos. 7 FLeTOMO DE VSUALCH+ 13 Consejo: Puede dar aun tema un tulo mis ctl antes de hacer clic en Agregar para Shodrlo asus fvortos. Smploment. edit ltl en el cacro Tema actual Puede utl- Zar sus props palabras para dare i tema tu practico en pestara Favorit in ‘ter Su thal original en el sister de Ayu 1= Para ira un tema favorito, naga clic er la pestafia Favoritos y aga dos se- ces clicen el tema que devea, La informacién adicional sobve la pests Favoritos esti disponible en la pes taita Contenido de la Ayuda, bajy Welcome To The MDSN Viewer Help. Mire ‘bajo MSNDL Library Help. Estudiar el terreno ‘Cuanto mas sepa sobre cémo estiorganizadala Ayuda, més faciles y mas produc- tivas erin sus bisquedss. Pas us tiempe explorando a través de lapestaia Cen tenido para ver qué es lo que hay y cOmo esti organizado, La documentacién de Visual C++ se divide en dos secciones y subsecciores ‘importantes que se mucstran en la Figura 1.2 ‘Aqui tiene una descripein breve de lo elementos principales: = Los Visual C++ Tutorials esefan teen cas de programacién claves de MFC. El tutorial principal se llama Seritble, es como ana versién abreviada de teste libro y no sbarca tanios temas. Sin embargo, si que explica algunos Figura 1.2. Seccionesyubseciones mas importnes dea documentacén ce Visual +4: APRENCA MICROSOFT VISUAL C44 6.0 VA ‘emas avancados que no explico, inluyende Inerustacidny Vinculacidn de bjetos (OLE) y bases de datos. ‘5 £1 Visual C+ Programmer's Guide explica Ios temas de Frogramacién, vii. \zando prircipalmente MFC. Est organizaco principalmente alrededor de 4 fases gencrales del desarrollo de una apicacin, asi ue piense dérde sstd enol proceso de desarollo como una guic para buscar informaciin im- Dortante, Entre las cabeceras del Visual C++ Programmer's Guide ver = sas com Perting And Upgrading, Beginning Your Progran, Compilirg And Linking y Debugging, Dos secciones del Programmer's Guide titsladas Adding User Interface Features» y «Adding Program Fincionality»divic den el volumen de sus tareas de proyramaciéa en aguellasque implemenian “asgos de irterfaz de usuario como, por ejemplo, ventanas de barras de he- ‘Tamienias, entanas y contoles las que impisan la programacién del motor de su aplicacin bajo la eapucha, 1 El Visual C++ Programmer's Guide abarca temas como e! uso de ls edito- ‘es, asistemes y ottas herramientas del entorio de desarrllo 1 El Glossary define cientos de términos para xyudare » ertender todo cl ar fet lajer kouca especial de Ia programacién con Visua C1 1 La Reference es realmenteuna coleccién de referencias eparadas para MFC ATL, les lenguajes C y C-+ las faiidades de entradi/slidalaseream y la Standard C-+ Library. Cada referencia documenta todas as clases, funci- res macros y otros elemestos que configura las bibliotecas de eddigo dis ponibles con Visual C++, Las referencias paca la bbliowca de tiempo de scion de CIC, el praprocesacor de CiC++ y Build Errors (reeren:ia de mensajes de eror) son todos pare del Visual C+ Pregrammer's Gude sn lugar de a Reference. 1 Los Sarspls son una coleccidn de programas cue puede ccnstruir y eecuti. Hlustran diversas t2enicas de programacién avanzadas, Fuede localizar un femplc aderuadoy cargatoenel dco duro rer mediode b Ayuda. Constte 2 tema Retweving Samples bajo MSDN Library Help, cue se puede encontar { bajo la entrada Welcome To The MSDN Library en 'apsstaia Contenido. | ( Cabas sueltos | Hay d sponible informacion adicional sobre la uizaciOn dela Ayuda de Visual | (C++en la pestis Contenido de a Ayuds, bajo Welcome To Tae MSDN Viewer | Help. Mire bsjo MSDN Library Help. Ademis de 20s temas que hemos ttalo, tambien encontral orientacin sobre’ ‘© Copiar 9 imprimir temas de Ayuda 1 Personalize el visualizador de Ayuda (ventana MSDN Library), eLenTonno os vSUALCe+ 15 PROYECTOS Y ESPACIOS DE TRABAJO Enel centro ce cada programa ge Visual C+ en desarollo hay un proyecto, gue se loja en un espacio de trabaja. Es posble en Visual C++ alojar miltiples pro- yectosen un espacio de trabajo. Por ejerpls,estéescribiendo una biblioteca de Enlace dindmico (DLL), puede terer un espacio de trabajo con un proyecto para la DLL y otro proyecto para el programa pequefo que escibe para probar la DLL. [No utilizaremns los espacios de rabajo de proyecto multiples en este libro, pero si ‘quisiera saber ms sotre ellos, puede exam nar el indice de la Ayuda para pvo- jects. Haga dos veces lic la primera ver que aparezca «projects» en la lista de temas, En la ventana Temas enccntrados que aparece, haga dos veces clic wOver- view: Working with Projects Proyectos Cuando empieza un programa nuevo, Ia frimera cosa que hace es generar un pro= yecto para el mismo seeceionanco el commanto New en el mend File. Por ejemglo, tin proyecto puede que sea para un programs de juégo que esta volvindo a esr oun programa de atilidad te tiene en mente. El nombre que especifica para su proyecto se utiliza como base para nomibnar otros archives del proyecto, empe- ‘ando con el archivo de proyect, nombreproy.dsp. (La extensién sp signitica proyecto de Develope- Studio. Developer Studio es un nembre antguo para el tentomo de desarrollo integrado, IDE, utliaido por ls aplicaciones de Microsoft Visual Studie, incluyendo Visua. C+*") El archivo de proyecto maniene informacién sobre qué archivos de cédigo fuente y archivos de recurso utiliza su programa y sobre cualquier ajuste que haya ‘especificado para controlar céme Visual C++ construye su programs, El sistema de construceiin de Visual C+ wiliza esta informacién cuendo compila y enkiza sus archivos para generar un programa ejeestable. ‘Alo lange de este libro gener s6lo dos tipos de proyectos, ambos uilizando asstentes disponibles desde el cuadro de dilogo New. En los Capitulos 2 » 5, Ullizaré el aaistente para los proyectos Win32 Console Application. En capitulos posterires,uilizara el MFC ArpWizare (fara archivos exe). Sin embargo, bay ‘tros muchos tipos de proyectos disponisles desde el cuadro de dogo New. A ‘medida que gane fuider con Visual C++, puede que quiera investiga otras opcio- nes més en profundidad. Espacios de trabajo ‘Cuando genere un proyecto, tarbién genererd por defecto un espacio de trabajo. Su archivo de espacio de trabajo nombreprcy.dsw (dsw para el espacio de trabajo Developer Stadio), guards inforracién sobre qué ventans de Visual C++ est abierta y donde se ubican, asi como cuaquierajust> que haya espeificado para su espa- 10 de trabajo, 16 Cuando genere un proyecto, Visual C++ utilize ajustes preceterminados para €el proyecto el espacio de trabjo, pero puede altereréstos x medida que tabs. 12 Para cambiar los ajustes de construccion para el proyeca, seleccione Set ings en el neni Project. ‘= ara cambicr los austes de espacio de trabajo, seleceione Options o Cus nize enel neni Tools. La pestate Workspace del ciadro de didlogo Options I permite especificar dlistintas opciones para sus ventanas, baras de estado y ros componentes det ‘espace de trabajo La pestaia Editor del cuadro de didlogo le permite espevificar _ajustes para el edi or de cédigo fuente. El cuadro de didlogo Customize le permite volvera colocir, air o borrarbotones dla barra Ge erramieatas, comandos de meni, atajos de teclado y las herramientas del mevi de Visual C+* Tools. Para ‘obtener mis informacion, examine el indice de Ayuda para customizing. TRABAJAR CON EL PROYECTO [Normalmente trabnjard através oe las siguientes tases para cesarollar sus spica- ‘cones Esta seccien describe cada fase paso a pase. '= crear un proyecto. Esto crea los archivos inciales sobre los que se Sasaré su trabajo. 12 Jilizarla ventana Workspace y sus pestaias Class View, File View y Resour 42 View pan trabajar con lis clases, archivos y recurso: C—+ en su proyecto. f= Agadir archivos al proyecto 0 eliminar archives del proyecto, 1 2ditar et c6figo y los recursos fuente en el proyecto. 1 Sspecifcar una configuravin de generacién para el proyecto (version de ‘epuracion > definitiva. Generar el proyecto (compilar y enlazar el cidigo). regi cualquier error de compilacion o viseulacion .cutar y Frobar el archivo ejecutable resulante, Depurar el proyecto, >erfilar y optimizar el eédigo (opcional). Creacién de un proyecto Los proyectos viexen en 16 variedades. Le mostrasé cémo crear una Win32 Con- sole Aaplication, el tpo de proyecto mas simple, qu uilizare os en los Capitu- los dei 2 al 5. Después del Capitulo 5, ulizaremas otro tipo de proyecto, una ELENTORNG DE VISUAL C#+ 17 aplicacign MFC, La secuencia de pasos implicados en ls creacin de cada unc de (6 tpos es normaimente similar, aunqce los asistentesutlizades para crear algunos tipos de proyectos se detallan mis que otros. Para algunos ‘pos de ro- {ectos, Visual C++ eres muchos archivos pam ayudarle a iniciarse. Para otros tipos de proyectos, Visual C++ crea archivos qu? no son de inicio. Para obtener mis informacion sobre cada varieda examire dl indice de Ayuda para project types: ‘Una aplicacin de consola ufiza un corjunto de funciones Console API para -visualizar su salida en una venteaa en modo zarécter, como una ventana MS-DOS. ‘Como eseribr aplicaciones de consola x0 ‘equiere mis sobrecarga que escrbir tana funcion principal, las utilizremos pare probar fos programas C++ simples. Para crear un proyecto Win2 Censole Appicaton, siga estos pasos,y consult la Figura 1.3 segdn sea necesaro: 1. Haga clic en New en el mend Fie, En el cuadro de didlogo New haga cic en la pestafa Projects. Haga clic en Win32 Coasole Applicstion. En el cuadro Project nane, teclee l nombre de proyecto. Nombraremos este primer proyecto Fist ‘5. Utilice el evadio Locatios para especificar una ubieacién pera los arch.vos de proyecto. Puede exaninar el directorio apropiago haciendo clic en el botn Examina al lado cel cuadro Location. 6, Seleccione a epeién Crete new workspace bot beams Figura 1.3. La pestate Projects ee cuadho a dslogo New. 7. Asegirese de que Win32 estéseleccionado en el cuncro Platforms. 8. Haga clic er OK, Este os so el srimer paso en la creaciin del proyecto First. Estéatento ‘A continuacin siga las instuceiones que aparecen en los euros de diilogo que sigien al cuadeo de didlogo New, Para una Win32 Console Application $610 hay un cuadro semejante 1. En el cuadm de dislogo Step 1 OF | (consul Ia Figura 1.4), seleccione ana apliac én «Hello, World! 2, Haga clic ev Finish, 3. Enel cuadry de didlogo New Project Information, examire la informacién resentada vara asegurarse de que es lo que queria. A centinuacion haga en OK, Los divectorios y archivos creados Vienal “4+ crea na dieeetori de proyecto en la ubisaciin que hs especifiefo en el eua'o Location Flt en el euadro de didlogo New. El directoro contient noo mis archivos. Pars una Win32 Console Applicator, el diretoro contends tres archivas de céigc fuente (dos archivos pp y uno h.), un archivo de proyecio (dsp) am archivo ce espacio de tabajo (sw) y un archivo ReadMe (txt). Visual (C++ tmbién crea anos cuantos archivos de soporte que utiliza, pero no necesits mos preocupartos -obre estos. El archivo ReadMe explica el fropsito de los otros archivan del directo, | selccne oto 2. Haga dle as Figura 14. El Resource View. Los proyectos normalmente contenen los siguientes tipo de archives fueme por ejemple, Menus. Hagn dos vees clic en ef ID cel recurso que desea me eT falta, com por cjemplo [DR_MAINERAME. En el editor de recursos que 1 Archivos eabecera,tamtiin conocides como archivos inclu, con fa ex- fe abre, edie el recurso, Para obtener informacion sobse los recursos de tensinde archivo. 24 -APRENEA MICROSO*T VISUAL C+ 60¥A, 1 Archives d+ implementaclin, o fuente, con la extension pp para C++, 0 a exterior ¢ para C 1m Archives d» recurso, con la extensibn 1c; adzmis os arehivos com las ex tensiones .tmp y ico y otros archvos que contengan e'ementos gficos 2omo imagenes de botones 0 iconos sis son os archivos que compl el sistema de generacion para los recursos binaries como los ments, las baras de heramientas, los cusdros de didlogo y ios iconosy para el cidigo C0 C++ [De vez en cuando, deberi aadir nuevos archives de implerentacion y cabe- cera a su proyeete: 1m Para crear archivos oppo c nuevos y afaitios a st preyecto, selescione New enel ren File, En el cuadro de didlogo New, haga clic en la pestafa Files. Haga clic en C/C++ Header Fle 0 C++ Source File. Asegurese de cue ‘2 opcién Add To Project esti seleseionada. Teclee un nombre de archivo ‘ilizando ana extensién epp para C++, uns extensién para C o una ex- ‘ensign fh para un archivo cabecera) Especifique la utica:ién para el archi- 0 nuevo sies diferente del directorio de proyecto acta, haga clic en OK. 18 Para afadirun archivo .epp, © 0 1, selecciore Add To Froject en ef ment Project. En el submend, Inga clic en Files. En el cuairo de dilogo Insert Files Imo Project, haga clic en cualquier arc-vo que deseeafadi, a conti~ suacidn haga elic en OK. (Para seleccionar archivos miltipes, manterga presionada 4 tecla MAYUS 0 CTRL mientras sslecciona) 1 Para afadir un archivo h existente a su proyecto, simplemente conslte el sombre de archivo cabecera en uns sentencia Hinclude de un archivo -h que ya estéen el proyecto, No necesita afadir msnusimente el archivo al proyecto, 1 Para borra un atchivo del proyecto, abraFileView, seleccione el nombre de achivoy pals la tecla su msdn. Eto elimira el archivo Jel proyecte, pero no bora el archivo del disco duro UB sat tore Cree un archivo ruevo hy un stchivo .epp en el royecto Fire. A continsacién borrelos del proyecto, (Puede incluso bomar estos archivos pariculaes, silo de sea, ot el Exploraior de Windows, ya nolos necestamos.) UB mnt tore ‘Varo: a practic: la ereacién de un recurso, Lo berraremes del programa First ‘poco cespués, Cox el proyecto First abiero en Visual C++, tice el ment Insert ELeNTORNO DE VsuAL C++ 25 para crear ur recurso de disloganvevo, Guarde el recurso de didlogo en un archi- ‘allamado Fitst.re haciendo clic en Save Aven el ment Fils. Cierre'a ventana dl ‘editor de Dialog haciendo clic ea Close cel neni File, Af el atchivo Firstc al proyecto. Para eliminir el recuiso de prtica del proyecto, aga clicen el recsrso {de didlogo mevo (llamado 1D!) DIALOG. por defec‘o) en ResourceView (que ‘esti ahora d'sponible} y pulse la tecla suru. Ahora estamos de vuelta 0 el punto de parida Edicién de recursos y cédigo fuente Ahora que sebe cémo crear un proyecto de Visual C++ y administrarsus archivos, clases y rectrs0s vamos a ver escritura 7 edicion de cédigo fusrte y recursos {ue constituren su programa. V2remos el editor de codigo fuente ¥ de recursus, y 2 continuacien procederemos a-rompilar y slazar lo que ta creado Eddici6n de cédigo fuente c++ Usilzard et editor de eédigo fuente de Vieual C++, que se muestra en la gu: 2 LB, para escribir ycditar su cSdigo. Para iniciar el editor de e6dgo fuente. tee lun archivo ‘huevo o cpp o ab'a un archivo existente El editor de eédigo fuente coifica autymiticamente en colores Ios distintos clementos de sintaxis del programa, lo que race que los archivos fuente sean mas ficiles de leet. Examine el indie de Ayuda acerca de symax coloring. El editor también puede emular dos editres de cSdigo fuente conocidos: Bret y Epsilon. Examine el indice de Ayuda acerca de editer emulation. Visual C-~ proporciona Figura 18. cleditor de cédigo Lent de Visual C++ con o archivo Fistpp abien. 26 APRENOA MICROSO*TVISUAL C++ 60 Aistintos mous de bealizar clases, funciones y otros elementos er sus archivos de keodizo uente, meliyendo ClassView. Encontraremos otros, induyendo Wiza {Bar ys comands Find, mas adelante, Le iniciaréal editor de cédigo fuenic ©» fel Capitilo 2, pero ste es un buer lugar donde hablar brevemente sobre la inlen- cid, o impresiin correcta, de les archivos de ebdiga fuente. ‘La mayoria de rosoros tenemos nuestras propias preferenias para el aspect Gel codizo fuenie, |) que se indent, cuénto se inden y dénde van las laves. Por «ejemplos aqui tiene dos formas nonmales que se uilizn para dclerar una fund , , [Ambos estilos ce codificacién son conocidos y os programacores a veces de- fienden su favorito con celo religiso. Puece conirola el estilo desu cddigoen el ‘cuadro de dislogo Cptions (seleccione Optiuns en el meni Took), Uilice la pestaa ‘Tabs emel cuatro ee didlogo pars espocificar los ajutes pars lr diferentes tipes de arch vos, como, por ejemplo, ls archivos de e6digo Fuente de C/C++, macros ide Vinual Basie Scripting (VBScript) y as sucesivarnente. Selescione el tipo ée archivo-en la lista desplegable, Especifique el nimere de espacics que representa teada pulsacin de la tecla, cudnt> indenta y si insertarearacters de tabulacicn fctuale: 0 espacios También puede especificar varias opeion:s para el comports~ Imient fe las inden aciones,ncluyenda st irdentat las laves aededor de un cuctpo de furcion o no, S utiliza la opcién Smart Indent,ruede hacer que Visual C++ imite estilo utlizado en las nlineas de cédigo anteriores (el mimero predetermi nado eseienlineas, Examine el indice dela Ayuda acerca de pretty print code, \dos de didlogo y otros ecursos ex su prograna utilizanco los ceditowes de recursode Visual C++ Hay un editor diferent para cada tipo de recus~ 50, Ilusraré el uso de la mayor parte de los mismos alo largo del libro. Vamos 8 ‘Yolve-1 la seccion «Uso de Resource View para obtener informicién introducto~ Tia some la apertun,edicion y creacién de recursos Especificacién de la configuracién del proyecto CCuande desarrlle su programa, normelmentetrabsjard en vna sonfiguraciin de version de depura-ién, En una version de depuracién, el compilador incluye fa informacion de devuracion que el depurador de Visual C+ pucde utilizar st en- ELeNTORNO DE VISUALCA4 27 cventra errors Logicos. Cuands esté prepa'ado para distribu el programa para ‘uso general (y en algunas ocasenes durant el desarrclo para relizar pruebis), cambie a una versién de lancamsento, Deputacign y lancamiento sen los dos tpos principales de configuraciones de proyec'o. Los programaderes avantados pulen baie configuraciones especiaizadas propas. Para cambiar entre las versiones de depuracion y laxzaniento, deer 1a configuracién activa para sufroyecto. Para hacer esto, haga clic en Set Active Configuration en e! mend Build. En el cuad-o de dogo Set Active Project Con figuration, hega clic en Win32Debug (por defecto) 0 Win32Release. A contima- ign haga eli: en OK. Como desarroliar un prograna siempre necesita depuracin, la configuracion predeterminada es una generaciin de depuracion. Esto cst ajustado asi por defec- {o, por lo que so tien: que cambiar la configuracién activa cuandc «sé listo para realizar una versién de lanzamianto, 0 evanso haya terminado una generacion de lanzamiento y quiera volver de ruevo a la generacién ¢e depuraci¢n, Generacién de! proyecto spuds de taber editdo el edge y los erursos del proyecto, es Hora de gene rarlo. Visual ++ incluye un sisma de gensracin que le permite comply en- Tazar su programa con un solo cemando. ot: Para general proyecto, mga cle Bild nombre ex en emen ul 0 BI proceso de generacién invoca el recurso apropiado y los compiladores de lenguaje, el enlazador y otras hetramientas Produce archivos intermedios ex el subdirectorio apropiad> (basincese en la configuracin act'va) y, sino hay ero- tes de generacin (ertores de compilaciin » de vinculacién), genera el archivo final ejecutabe (exe). Durante la generac:6n, vera mensajes en la ventana Output de Visual C++ que indica el progreso de generacion y enumera cualquier etoro problema encontra- o, La ventana Outpur se abre durante ana generacién si no se abi6 antes, La ventana Outpit tiene varias pestas. La salila de generacién aparece en la pesta- fia Build. La Figura 1.9 muestra ventana Dutputy los mensajes generados da- rate una generacin libre de erares. Inténtelo ahora Genere el programa Fist que hemos creado enteriormente siguiendo bs pasos que acahamos de describit, che un vstazo ala salida en la vertana Output. ;Qué ve APRENDA MICROSO"T VISUAL C++ 6.0 YA Figura 9. La ventana Output de Visual C++ durante una generacin bre de errores Consejo _Elsiseme de generacion cea un Build Log que pueda examnar mas adeante. EPButl og es on restr pracico ce generacones anterores y ls enorescometdos y Eorreg dh reqstre se alnacena ere directa de prorecto en un achivo HMTL fam {do Nomoreproy pl, ue puede exarnar en suexplorader Web. Elachvo no esta visible fn Flevew, af que sbralo fuera de Visual C++. Correccién de errores de generacién Los eres de geneacin son errres de sintaxis, problemas de archivo, et, ope tos a los errore logics. Para cortegirerroes Logica, utiliee el depurador (con sulte el Capitlo 13) Para corregi errores de generieiGn, sig ext0s pasos: 1. Haga dos veces cle en un mensaje de error ena ventana Dutput de Visual (Cte. Esto bre el eddigo fuente en donde ha ocurido l eror y apunts ala lines gue contiene el error, (Algusas veces el error 1a tenido lugar algo antes d= esa linea, ai que sino ve el error en la linea a la que apunt, txamin® las lineas anteriores.) La Figura 1) muestra la ventana Out y fos mersajes generados durante una generacién en la uefhayan tenido gat los errres Figura 1.10. Lavertane Output de Visual C+ + durante una genetic libre de eres ELENTORNO OE VISUAL C++ 29 2, Haga slic en elmimero de mensaje cn la ventana Output y pulse fa tcl 42 error en Is linea de mensaje de exor F1 para obtener informacién sobre el 3. Comij el ebdigo y vuelvi a generar. Los errores ocurres a menu en cascadh, uno o das errores leptimos provo- can mensajes de error adicionals (algunas veces varios) en sucesivas lineas de cédigo. Es normalmente una bana estrctegia para coreg los primeros errares Tistados, a continuacién genere ora vez sin examinat los Ullimos errres, Para los programas relativamerte pequetor, es précico solucienar unos euantos errres, generar otra vez, solucionar mis. penerar ota vez y asi sucesivamente. La correesin de ertores a menudo requere un poco de trabajo de detective y mucha lectura de la decumentac dn. Puede encontrar Is doeumentse‘6n sobre los mensajes de error y examinar e indice d> Ie Ayuda acerca de build errors. Haga dos veces clis en wfixing». Versmos un ejercicio pars probar el mecanismo de cerrores desputs dela siguiente Ejecuci6n del programa Después de una generacion con exto sin errres de generacin, puede ejecutar su ‘programa dertro del extorno de Visual C++ Nota Fara gecutar el programa, leone Eecute nombre xe er men Bal, pulse cms Inténtelo ahora _Ejecue el programa First. Tenga > cuenta gue después de imprimir «ello World! cn a ventana, Visual C++ imprine la senencia «Press eny Key to continue, Slo Ja primera lnza es parte de la sal da del programa Fist. La Figura [.11 mucstrs la salida del programa Fist. Inténtelo ahora En el programa First, uilice FileView para abrir archivo Fest.cpp. 5a exe archi vo, introduzca un error intenciont: en la linea printf, berre's comilas dobles de final. La lines deberia parecer cel modo siguiente: Genere el programa. Obtenéri dos erores y una advertencia, Haga dos veces licen el primer mensaje de eroren la verans Output, el primero que dice «newline 30 [APRENCA MICROSOFT VISUAL C+~ 6.0YA Figura 1. Lasalca del programa Fist. in conganto. Una pequelia fecha azul apunta a la linea de e6digc conflictiva en la ventana del editor de cédigo fuerte. En la ventana Output, haga slic directamente Enel mimero de eror, 2001, « wntinuacion pulne Ia tela ri 20 Ayuda ce Vi Sual C+ abre ol tema para exe nimero de error. El compilador aparentementecon- det a linea errénea como una constanteformada de forma incrreeta. Sabemos fue es esa cause de unas comilas que faltan. El segundo erro" y Ia advertencia, ‘Qcurtes aparertemente como consecuencis del primer eror. Li advertencia aparece porque el nivel de advertenciaestd justado a 3 (por deface) en el cuadro de didlogo Project Settings. Seleccione Setings en el ment Project haga clie 2 la pestaha C/C++, asegirese de que la lista desplegable dice cGenetaln,y examine el euadro Warning Level. Uraivel deadvertenciaajestalo ‘este valor hace cue el compilador se vuelva quiscilloso con bs problems po- fencishs que sefiza como advertencias, Esto puede ser valioso, asi que es bueno dejarc nivel sjuvado a un valor bastante alto Intémtelo ahore Et treo para diagaosticar el problema rea! del programa First es reconocer que se” indento una eadera de caracteres, lo que deberiallevarle a notar que fal 3s Comillis dobles. Vuelva a eserib las comillas dobles y genere otra vez. Esta ver no deberia haber erores ni advertencas. Depuracién dl programa Si encrentra errs légicos mientras ejecuta el programa, utliceel depurador par tencontar y selucinarios, El Capitulo 13 incluye ura visita al cepurador. ELENTORNO DE VISUNICe+ 31 Perfilar y optimizar los programas 1 perfilado utiliza la heramientade perfidy para localizar los eue'les de botela y las deficiencas del eddigo. La eptimizaciéa incrementa la velocidad del c6dizo 0 reduce la cantidad de espacio cae necesita el programa, Puede exarinar el in ce de la Ayuda acerca de profil y optimising (haga ¢os veces clic en scoden) para aprender més sobre ella, USO DE ASISTENTES Y DE OTRAS HERRAMIENTAS DE VISUAL C++ Visual C+ le proporciona much ayuda 3 Ic hora de progeamar, priacipalment 4 través de su mplio conjunto dzasistentes. Un asistente es una herramienta que aparece como una secuoncia de cuadtos de didlogo. Le guis a través de un pro- ceso complicado de hacer elecciones. Resumiré muy brevemente agut los asi tentes principales y las herramientas, pero los trataré mas detallacanente en el libro |= Utilice AppWizaid para cra un conjunto de archivos de inicio al princi de un proyecto. La mayor parte de lo: tipos de proyecto en el cuadro de idlogo New invocan AppWizard para crear Ios proyectos y sts archives Ya se ha encontrado con AppWizaid cuando cred el proyecto para cl pr rama First. 1 Utilice ClassWizard a mecida que su rrograma afade las clases C+ y los ‘miembros de clase, manipia los mapas de mensae MFC, trabaja con pro piedades y métodos de autsmatizaciga, opera con los sucess ActiveX y fealiza muchas oa tareas 1 Utilice WizardBar como ux atajo a I funcionalidad de ClassWiserd y como tuna herramienta de navegaeién para encontrar clases y funciones en sus archivos de cédigo fuente. WizardBar es una barra de herramienlas. Utiiax- remos ampliamemte la WizerdBar. ‘Ademés de los asistentes, puede utilizar los comandos del meri Tools, Por ejemplo: 1 Ulilice et comando Source Browse: pura snvocar el exploradar fuente de Visual C++. (Consulte ef Apéndice para obtener informacién sobre el ex plorador Fuente.) = El comando Erro: Lookup le ayuda a buscar un mensaje de eror cuando sabe el timero de eror. t= La hetramienta Spy*+ le permite espa en los messajes Windows en tiem po rel. 32 18 La herramisnta MFC Tracer permite a la macro TRACE de MFC imprimir cadenas desalida de diagnéstic. ‘También puele adadir sus propias herramientas al mend Tools: Seleccione ‘Cusianize. En elcuadro de didlygo Customize, haga elie ena pestaia Tools. Para oblener mis infermacién, examine el indice de Ayuda aceree de customizing hags fos vecss cic en «Tools menu». TRABAJAR CON LAS VENTANAS DEL ESPACIO DE TRABAJO |A medida que desarrolla su programa, ublizar distinas ventanas en Visual C las ventanas del sditor de eédigo fuente y de recursos, las ven-anas Workspace (urpety Tas ven nas del depurador. Ne:esitari conocer alguras téenicas de ma ree Je ventanas. En las dos seeciones siguientes. le explicaré los dos pos del ‘Ventana que puece encontrar en Visual C++, las ventanas de documento y la ver {ancs acoplables. Le mostraré hs lineas generales que faciitan y hacen mis pro- dduciva la progeamacién con Visual C+, y que hacen que la rrayor parte del de tcbajo ene deponible EO eee Impo tante: Mantener todas ls ventanas de Visual “++ donde deseo tenelas a med. - mandos del mend File aren, cieran, guanlane imprimen el contenido de lave tana de documento. Los eomandce dol meni Window le perniten ir hacia atrés y Adelante entre las ventanas de dscumente abiertas, asi como ordenarlas. Puece Ponerlas en cascada, en mosaico y dividichs. ara abrir los archives de cd go fuente 0 0s espacios de irabajo recientemes- te ullizados, haga clic en un nombre de archivo en la lista de los arivos utiliza: ‘dos mas recietemente en el ment File. Para mostrar las vertanas de documento ‘ocultas, utile la lista de documertos abierto: del meni Window. Obtener el méximo espacio de trabajo disponible Utlice uno o més de los siguiensss métodos para obtener ef méximo espacio de trabajo en la ventana principal de Visual C++: = Cierre las ventanasinnecesaias, especislmente las ventanas que se acoplan, ‘como por emplota ventare Output. También puece cerar la ventana Wer- kkspace mientras escrba el cadigo siempre puede valve a abri las ventants ‘Workspace o Output haciendo clic en los botones de intercambiode la bara de herramientas Standard. También puede abrit una lista de ventanas abier- tas desde esa barra de hernanientas. Censulte la Figura 1.13 pera conocer las ubicaciones de botones. 12 Maximice la ventana de documento en laguetrabajaactialmente, Esto oculta todas las demés ventanas d= documente, pero permanocen disponibles de {deel meni Windows, Los beiones Mininizar, Maximizar y Cerna para uma ventana de documento maimizada aparecen justo bajo los propios de Vi- sual C+. Consulte la Figur 1.8 para conocer las ubicaciones de botones 34. AORENDA MICROSOFT VISUAL C++ 6.0YA 18 Utlice el comand Split dsl meni: Window para trabajar en més de una rer te del docurnento a mismo tiempo. ‘= Considere 4 utlizcion cel comardo Full Seren en el meni View, Esto tlimina Tos mens, las barra de Reramientas y todo To demds excepto su Ventans de documento actual y la barra de herramientas diminuta que le permite finlizar el modode pantala completo. (Si labara de herramiertas fo esti abi. pulse la teclarsc.) Uso de un mers contextual de ventana de documento aga clic ene btn derecho del rain en una ventana de documento pars hacer ae er comextal (ambien commeide co tn mend Se eceso dct) francs ventanasde documenta el meni context inluye conandos como Cut, ‘Copy Paste cInservRemove Breakpoin, si com fodas fs cemandos pas oe- CoP dosmacion sabre la clase C++ 0funsion bajo! cursor Sil documento es un Teoumonto il ctor Resource los comandos cambian alos adecundos para cl fipoce recurso qe est editando } Ventanas acoplables i ‘Unc ventana aoslablese puede adjutara cualquier bord de ventana principal evel Co Feta carcteristca le permite colsar als ventnas de forma mis dean mods detain as venlnas acopablestanbizn pueden for en see a vontina principales lugar de ln acoplads, La igum 1-12 muestra una aaa rarlads (Outpt), Lasventanas acoplables sempre ae quedan ena pare TERE dein ventana as que Visul C+ ajata las ventanas de documento sare far so ara lan ventanas acoplalesreciewemente bits. Figu'a 1.12. Unaventana acopladoy una ventana acoplablefletane (on as bras de henamientas ocuts) ELENTOMO cE VISUALCHY 35, Importante: 5 su ventana principal de Visual C+ + aparece muy saturada itente ‘nar algunas vertanasy ajistar otras con los commandos Cascade y Tie ai como con Ds comandos Mininize, Restore y Maximze. Manipulacién de ventanas atoplables Para maipularans vers scope, haga cc en os cordonillos (pomos Tago del forded a vertana in gur -2 macs ests evden), Arete entana pore cordon paraolver scoparia suntade diferente ela vere tan pnp Haga dos veces ce en lo orton pare cvactva a ven Spy don ees le I ee a venta, jot para volver a acopala Tims povicionacoplate que apo Hay dos veces clic en una ventana accplada para cue flote.) | Inténtelo ahora Vuelve a acoplar la ventana Worispace succsivamente Ia parte superior, a bt derecha y a los hordes infeiores ce la vertam principal, Haza dos veces elie en los cordonciios de la ventana pass que Mete. Haga dos veces clic en la barra de titulo para volver a acoplaria. Yo sefiero margener la vertans Workspace acople- da en Ia parte iequierda y la ventana Output, cuando este aberta, acoplada en by pare inferior. Sus preferencias puele que dife-an de las mias, si que esperiment, Acoplar ventanas fuera del sepurador Ano ser que tenga I bara y de men y caluier bara de brains abies, jhe umbign extn acophndo venus, la mayor pate dl tempo werd slo ds {entanas que se acoplan en Visusl Cr as ventanas Workspace Output. No malmente me gusta aren la ventana Worcpace abla, pro alanis veces ‘=rara para ierar mis enpcio. Frefiero cc tat la vestana Outpt mayor pat el po Reap de oot eirs unreal es > alguna or acién que eva nu ia a esa ventaa, Las tones Norkepacey Suu rade ern Sand gr 1) so ton a da eit de oer, Sot de inercambi dea ita de vestina fea de OH Leon dntcambi del ventine de se Figura 1.13. Lostotones Workspace, Output y Widow List dea bara de heramientas Standar. 36 [APRENDA MICROSCFT VISUAL C-+ 60 Acopiar ventanas en el depurador Si cjesuta su programa en el depurador, verd ots ventanas acoplables: Watch, Call Sack, Memcry, Variables, Registers y Disassembly. Explicaré el uso de sas ‘ventas en e Casitulo 13, Por shora, simplemente sea consciente de que le mani pulaciin de ls propia ventanas se parece mucho a la manipulacién de Tas venta- ras acoplables que no son de depuracin. ‘Mencs contextuales en las ventanas acoplables Los mens de acseso directo 0 contextules que obtiene haciento clic en el baton tderocio del mtbr en una ventana varian mucho de una vertans acoplable a otra, Los ments tambisn se basan en el objetoen el que hace clic dentro de la ventina Por cemplo en lt pestfa Clas: View de a ventana Workspace. el meni cambia ‘medica que Face elie en un nombre de éase, un rembre de miembro de case, el titulo superior dela lista de clase o el espacio vacio dentro de le ventana. Intéte- fo! Tambien vera las diferencias en las oiras ventras, asi que experiments Administrar ventanas acoplables Al centrario que las ventanas ée documento, no administe ventanas accplables desde el meni Windows o el meni File. En su lugar, utilce los omandos de ment View para abrir ventana Workspace © Output o cualquiera d las ventaras 260 plables en el depurador. Las ventanas del depurador se abren desde el comando, ‘Debug Windows del meni View, Haga clic en el botn Close de Ia ventana sco pilabl: para cera la venta "También puede abrir y cerrr cualquiera de ls ventanes acoplables desde la ‘bars de he-amientas, La barra de hertamientas eontiene bo-ones Workspace Ouipus. La bare de herramientas Debug coniene botones pera las ventanas de depw-acon. Mends y barvas de herramientas Visuil C+ también utiliza mends y batras de heramientis d: forma amplia. EX lugat de describit aqui com detalle Tos meni y las barras de hesamientas, los pre sentaré a medids que vayan apareciendc en Ios capitulos sgueentes. Los sigtie?- {es comentarios generals serinsuficiente por ahora, 1a Para visulizar una bares de hereamientas Ce Visual Cr+, haga clic en el bbotdn dercho del ratén en cualquier parte en el area de la barra de herre= imientas tras abajo de Ia barra de mend, pera no en I barra de herrienta5 fobre la que desee intercambiar. Cierre las barras de herramientas del mis ‘mo modo Probablemenie descaré siempre que se visuclice Ia barr de hes ‘ramienta: Standard, junto con WizardBer. La barra de herramientss Build ELENTORNO DE VISUALCH+ 37 también es prictica. Muctss de las ots barras de herramienas, como For ejemplo la barra de herramentas Debug, aparecen y desaparecen segun sea 1 Puede fersonalizar las baras de herramientas y mers afadiendo, elimi- nando y desplazando los belones de cemando, Hsga clic en Customize del ‘meni Tools, a cantinuaciée haga clc en la pestaia Commanes par los <0 ‘mands de meni, 0 en la restaha Too ber para berras de heramientas. {éntelo. Busque en el indice de Ayuda >ustomizing y haga dos veces clic en «toolbar buttons» y «toolbars». Tambien puede crea barras de herramien- tas nuevas propias; éstas pueden contsner comandes existents o botomes para comandos que eree esribiendomscros VBScript ocodifivando secuen- cias de acciones 2n Visual C++. Le di'é un poco mas acerca de las macros isqueds estindar 0 reemplazar Ia operacién-en el archivo de ccédige fuente actu), seleccione Find 0 Replace en el meni Edit. Usilce Find para buscar cn el archivo una cadena de texto particular. Utilice Replice para enoontrar ‘casos de una cadeva y remplicela con otra cadena “Taito Fin! ecmo Replace le permiten persoualizar Ia bisqueda de varias Forms: ‘a Puede hacer corresponder solo palabras compltas, rh eoneuerda con shin er0 no cor think 1s Puede hace que concuerden las trayisculas, back coneserds con fuck ¥ rho con Back © BACK. De lo eontrario back, concuerds tanto 1» Pucde uilisarexpresiones normales como las que se utilizan con el coman- do Grep de Unix. Los cuidros de dislogo Find y Replace le ofrecen gran ayuda ¢ la tora de formular expres ones regulates. ‘8 Puede timitr basquedas I texto sleccionedo 0 busexr an todo ol archivo, 1» Pucde silizar a opeién del comando Find, Mark All, pam marear cai una de las spariciones del archivo, Estole perme examinar cada busqueda mis tarde uilizando los marcsdores. Explicaré los marcadores en breve. CE importante: Ants de que ejecute un comendo Find o Replace, puede hacer clicen (aban de textsensu eri de cedigo fuente La cade aparece eel cadre Find What Gard abra cualquier cuadro de ddiogo Find o Replace. El control de lista desplegable Find La lita desplegable Find on la barra de herramientas Standard es un atajo practic pare suscar en e archivo actu Simplemente haga clic en ef control, teclee Ia Eadera que le gustaria encontrar en el cuadro desplepable y pulse la tela 1NIRO. flnténclo! Al igeal que cuadros Find What y Replace With en los cuadros de dit Togo Find y Replace, la lista desplegable en el contol Find almacena todas las ‘pdsyuedas teciertes, abra el cundro de Ista desplegable y hag clic en la cacens) sdeseeda } El comando find In Files El comando Finc In Files, que se encuensa en la barra de herramientas Standard ‘en el mend Edit, una faclidad de bisqueda potente que puede buscar Bookmark, teclee un nombre para el mareador, que sea algo ¢: lo ue ped aortas ngs. A cominaién haa ci en Adi pra cere logs. 18 Para encontrar un marcaior més adelante, haga clic en Go To en el meni [Edit. En el cuaéro de dit’ogo Go To. haga clic en Bookmack en el cutdro Go Te What. A continuscin teclec un nombre de marcador en el cua «ro Ener Bookmark Nar, o haga clic en la flecka de lista desplegable3ara visualzar todos los mareaiores. Haga clic en el que desea y acontinuacion haga clic en Go To. 1 ara ciminar wa marcado sleceineloy aga clic nel cunt de dingo Delete in the Bookmark, a . Los marcadores en fs archivos de cidio son simars a Favoritos en pero los dos son sistemas distirios. - add MICROSOFT EN EL WEB Y MSDN EN LINEA Vinal C+ pee en eno de io compas Sin ebag, aden clo ue colon oe licen uae ular stoma prs seer a ia an gue Sis Mimuldn petuces nerce mpeomsrpepenses sone Pa, depo ore, fmocie Uehy cape priuie Aconls Suisun BON yet hyde ical ebay ntsch ean eh ce Mes renee dar pote Hep for ned ae MSDN? te Pane dee py Jato ecb pate ioctpes Begone icines tres Soaas inci aptde npr pl on slgnt camioo bs oes ‘= En Visual C++, haga clicen el comanslo Microsoft On The Web en el mend Help. 1m Puede acceder al Go de Visual Cr direccisn de Interret desde el commando URL en el mend 40 [APRENDA MICROSOFT VISUAL C++ 6.0 YA Microsoft Oa The Web le permite acceder a mucha documentacin, inclu: {do numerosos artcuos téenicos y varios libros, como, por ejempl>, The Windows lnterface Guideline: for Software Design cnd Inside OLE, Ene mend Help de Visual Cit, selene Microsoft On The Web y a continuacién MSDN Online Despucede que su explorador se canectealsitio web MSDN Online, siga cl enla- ce en el panel de laizquierda a MSDN Library Online. En la pizina web, puede SxplonirTos conten dos de MSDN Library expandiendo las eabeceras de tera, 0 puede bascar cadenas de texto especificas. Ademis tenga en cuenta el botan de Dasquedh Advance. CONSEJOS Y TRUCOS Para cerrar este capitulo, le mostaré unos cuantos consejos pan utilizar Visual (Cit gu: deberia saber antes de empezar a trabajar. ft Liilce e comando Advanced det meni Edit. Este comando abre un ment Jerdrguico cen varios comandos stiles. Para aprender ms sobre estos co- qaandos, examine el indice de la Ayu para cl comande ustabifs, que abre tema sHlow Do | Replace Tabs With Spaces?» Cereade la parte superior {& ese tema, haga clic en 21 enlace FAQ. Explore los enaces en el tema ‘Frequently Asked Questions: Text Editor. 18 Utlice las opciones nuevas intelliSesse. Igual que en les aplicaciones como Microsot Word y Microsoft Excel, Visual C+* incluye IntelliSense, 0 ‘completa, eenologia que complet listas de pardmeiros proporciona it~ frmacicn de tipo, ayuda aseleccionar el miembro de clasea invocar y mis uede utilizar IneliSense de modo autonrétice, IntlliSerse intenta antic arse hacia donde va conforme tele, o puede controlar eimo funciona I= {elliSense per medio de la pestata Editor o el cuadre de dislogo Options {meni Took). Si elige desactivar el funcionsraiento automitico de Inteli= Sense, todania puede obtener su funcionalidad por medio de fos comandos siguientes en el meni Edt: List Members, Type Info, Parameter info y ‘Complete Word. Compruete el indice para IniefiSense y elga el tema «About “Automate Statement Completion 1m Uitilice la Gallery para insertarcomponentes prefabrieado: en su programa. Puede aad contoles Microsoft ActiveX (siempre que taya seleccionaio wa opeitn deresha en la herraments AppWizard) uw otros componentes © ‘igual C+-Por ejemplo, pede aad el contrel ActiveX Microsoft FlexGrid MSFlexGri) y utilizarlo an una de sus ventanas 0 cusdros de didlogo pars {Sministrr la informaciér tabular, O puede afadir intoacién de stems i cuadro de dislogo Acerca de, esta opeién permite als wsuaris examina ‘nformacigr sobre sus sistemas desde el cuadso de dislog> Acerca de, todo on el ebdigo minimo de su parte, Tustraré esto utilizando la Gallery mis ELENTORNO DE VIUAL C++ 41 aden cael ia, Maris ut eke ama ce a Are para la galeria, haga dos veces clic en wGallery» (con mayisculas), y alija el tema «Reusing Code: Overviews. a 7 = 1 Persotalice su enoro d trabajo en Visual C+ con sus propias micros Coutar onl enn oe macros Erp Las macros son oat Sena iran era cm or sje aaa cm js Ins socurcia reeves de comandor Hay dos mods de cesias Bikar, pac tinlcsate grr am spouse cote: La oe ‘mands grabado formar una more nombrada que puede socir con ah Command de ment, bts de bara de herramintsocomblnaion de els, Sento dae oad, ceeuts emir, Sep, pode cr un rn de macro (or medio dt suadeo de logo New ene mend File) xc pepo ebigo ene exguaje de macros VBSerip, Par sMener mis formation sobre mactos,nsluyendo ls macros pratada, compre ei So Aparna aga echoes jd ew: Macro Hay vanes libres disponible bree Tenge VBSeit 0 Visual Basic, Seiping tion. ain Inténtelo usted mismo ‘Aqui tiene sas primeros ejercieis extra. Vea To que puede hacer 1, Dedique algia tiempos No te exlcntotoos I an 3 meni, que merece In pena gue conta Jo ae lace. Al final dl ro, utlzamos expliamor cat todo lot co- manos de me, stentar Las cosas en los mens de Visual C+. 2. ‘Tome su tiempo para examinar la documentacién de Visa cw. Lilie Ia pest Contaido dea ventana Ayuda para failaiars con tleaqemna geeraly lr conenos de a documetactn de Visual Co Cato mda fumiliatzsto et, mds facil sr lca a respuesta su preguntas, En paral, ent estat Contenido, vaya Weloome To fae Visual C1 Gy examine os temas tjo Visual C= Docomen: inion Map éQUE VIENE A CONTINUACION? Atos qe wn btn content ecm ilo cries dle tomo de Visual C++, 0 IDE, es hora de empezar a programar, i 1 Si todivia no conoce el lenguaje C+-, ea los Capitulos 2 5. Esos capitue los contienen namerosos :jereicis d programacion de C++, Capitulo 42. APRENOA WICROSOFT VISUAL C++ 6.0.YA f= Siconoce C+, puede que quiera saltarse los Capitulos del? al S y abordar irectamente u Capitulo 6 sobre la programacion de Wirdows y Tos Capitu: {os 7y 8 sobr: la programacién de la biblioteca MFC. Si ye es un vete'ano cn Windows, suede saltase el Capitulo 6, Fl Capitulo 7emieza Ia secsen ta de MFC, que se extiende por el resto de liso, Fundamentos de C++ ste capitulo abarca lor elementos mas wilizados del lenguaje de programacién C4, EL Capitulo 3 continua ol rlato explcando los punterus de C+, tas seferen= clas, los archivos de eabecera el Ambito. En los Capitulos 4 y 5 n0s adentramos tn las clases de C++ y la progamacin oientada a chjetos. Necesitara todo esto ‘cuando vayamos a li progranacién para Microsoft Windows con la Biblioteca Microsoft Foundation Class 6.) (MFC) er la Parte 2 "Aaui hago una suposicidn importante que ya ha programado anteriormente, preferentemente en C, pero pesiblemente en Basi, Pascalo algin cro lenguaje de rogramaciin de procedimiewos. No espero gran cosa, s6lo que entienda unos uantos conceptos esenciales,incluyendo el fljo bisico Je contol de un progra- bucesy la ramificaciés de estrcteras,funciones (también conocidas 2omo procedimientos 0 subrutinas),arametzos,tipos de daos Misicos, entrada y sida, J compilacion de un programe, Si se sien‘ desconcertado por cualquiera de esos términos, le recomiendo vivanente qu: sa un curso de programacion de ficia- tin o estudie un texto de pregramacin de iniciacion antes de lanzarse a C++, Windows, MFC y este libro, La profurdicad es excesiva para las personas que no saben nada, (Ces es un lenguaje de programacén complejo, muchos de cuyos elententos son misteriosos y abstracts, Es también tn Ienguaje grande, disehudo y desinado Al uso profesional, eso sign'ica que age s6lo puedo presentar les fundamentos, Fl énfasis de este ltro esta ex utilizar Visal C+ para su propésityinicial, que es progranacion Windows, uilizando MFC. Seri tan claro y prctico corro sea posible, pero estoy seguro de que desearé afadir un suplemento «este curso intro- ‘uctorio cen un estudio més rrofundo de C+ IMEC es un marco de trabajo de alicaciin constuido con matrias primas de (C++, fundimentalmente class, MFC proporciona, esencialmente, una aplicacion a aa APRENDA NICROSOFT USUAL C++ 40YA de Windews que furciona, un marzo de trazajo al qu> puede ajstar su propio ‘digo pera defisir b que hace su aplicacién, EI mareo de tba proporcione igran parte del aspect de Windows, las coses como las ments, barras de hera- Imientas. suadros de éilogo, controes y barmas de desplazamiento. También pro- pofeiona necanismo: que facilitan a8 cosas guardand> sus datos en un archivo 0 Imprimigedolo con relative failida, Las partes del arco de tabsjo son las ela- ses de Ci que repretentan componentes del aplicae‘én, come la ventana princi- pal de Ia aplicacion, sus euadros de didlogo, cadenas de caractetes objets grifi- fos comorectingulo: y puntos ¢, incluso, la propia aplicacion, como objetos. Por fo que para utilizar “sual C++ para su propésito iniial, neceste conocer su cient C++ come pas trabajar dentro de MFC. "Tenenos suerte de que lot desirolladores de MFC nos han Rgado un sbli- do fundamento principal de C++, caracteristicas que no suelea tever problemas. Por el bien de todos han evitado algunas ce las carcteristcss y éonicas C+ mas dife les, como li herencia miliple. Aus asi, necesita un bues conocimiento de los findamentos quiere entencer cémo esti escrito MFC y c6'0 funciona, y especialmente si va e programar con MFC, Un recurs en el que muchos desaro- Iladores ce MFC confian es en el C++ Primer, 3° edicion, de Sank B. Lippman y Josee Lajoie, (Addison-Wesley 1998) peto ay otros muchos libros adecu “Jos, Si etd muy interesado en C+, también deseard The Ammocated C+ Refer rence Menual (carifosamente conocido como el «ARM) de Margaret. Elis 1 Bjam Stroustrup ‘Addison-Wes ey 1990) Stroustrup es el argitecto original de C++ presidente del comité del American Nationsl Standacds Institute (Irsti- tuto Arvericano Nacional de Estindares) (ANSI) sobre las extensions del lengua- je Co. ‘Lo mis impertate que obtendri de este libro es un buen conocimiento de las clases de C4, junte con el disefo orientado a objeios y los corceptos de pro- framacign que ‘ubyacen a las clases. Por el camino, sin embango, echaremos tin vistezo a muchos elementos de la sintaxs y uso de C+. Donde hay mis histo- tas de las que sitio ara conta, le indicaré los temas apropiados cx la documenta- cin de Visual C++. ¥ al final del Capitulo 5, le indicaré qué elementos excluyo Geliberacamente. Ptede hacer su trabajo de postgradado soxre ellos mis ade- lante HELLO EN C++ ‘Vamos « empezar ce forma tradicional y prictica, escribiendo tn programa de (Cis una version ligeramentetrucida del femoso programa «Hell, Wordl'» que suele sivir de inico a la hora de aprender la mayor parte de los lenguajes de programicin nuevcs, Eso seré un poco mis complicado que el programa First, {que hemos ereado ex el Capitulol, porque Hello est diseiado par ilustrarverios de fundamentos de 0 FINOAMENTOS DE.Ce+ 45; Creacién del programa Siga conforme le vaya guiando en un psse> por los fundamentos de C+ Inténtelo ahora Primero, en Visual C++, dé les pasos éescritos en las cinco secciones siguisntes para escribir y guardar Su cago. Creacién de un proyecto ruevo Cree una nueva Win32 Conso« Appliceticn llamada Hello, (El proceso se parece ‘mucho al que siguid on el Captalo 1.) En 21 meni Fils, abra el cuadro de didlogo New. En la pestafia Projects, specifique kas opciones que se muestran en 1s Ta- bla 2.1. Utice el cuadro de utcacion paraclegir un directorio en elque colocar la aplicacin. A continuaciOn haga clic er OK, lo que proveca que se abra AppWi- dard. El titulo del dillogo ArpWiard sexi Win32 Console Applization, perque {se es el tipo de apliacién que estamos desarrollande, ‘Tebla2.1. Opcionese austaren la peste Projects del cuaco de dilgo New pein ‘Aluste Tig de proyecto Wins? Project Name Hello rene New Workspace Selecsonad> Pratforms Mate de camprobacin en Wid? Utilizar AppWizard para especificar las opciones de proyecto y generar archivos 1. En AppWizard, haga cke en Ia opcién A Simple Applicaton. (Conslte Ia Figura 15.) 2. Haga clic en Finish pera abrir el cxadro de diilogo New Project Informa tion Examine lo que el asistente esté creanéo, a continuscion haga clic en OK. La funcién main del progrima esta enel archivo Hell.cpp. proyecto tam- bign est configurad> para lasabeceres precompiladas en los archivos Stdax.h y Stadfx cpp (Hablaré sobre las cabecers precompiladas en el Captulo 3.) 46 [PRENOA MICROSOFT SUAL C++ 6.0 “Abrir el archivo Hello.cpp para editarlo 1. Exla verana Workspace, haga clic en la pestataFileView La Figura 2.1 muestra Visual C+> con la ventana Workspace abierta y Ios tres pasos si- svientes ya terminados 2, ‘Haga clic en lsigno (+) delante de Hello Files 3. Haga clic en sf signo mis delante de la carpeta Source Files 4. Alga dos veoss clic en el archivo Hello.cpp para abrir el archivo. La Figu- fa2.1 mecsir: Hello.epp abierto para editalo en la ventara del editor de tedigo fuente, que se encuentra a la derecha de la ventana Workspace. Afadir :6digo al archivo Hello.cpp ‘Teclec les lineas en negrta que se mucstran en el siguiente listaco de programe ‘del cOdigo Hellacpr, 9 n0 olvide el punto y coma (;)al final de lamayoria de las Hineas: seo ae joer rus eran delete ps mic are ts eet en Figura 2.1. Fla:chio Hello.cpp abirto para ecb Funpamenrosoccs+ 47 Sela snyosomnyegy SSti*Manrs ouo PanEND = *roeJo ante, por anor feyoosabyed? 1/ gettice un shjeto toatrean pera ia anlian (mente © 2)) « (eyacaners 11 enyovodiye wo tems pariaatron y ne devusive raraleades Guardar su trabaje Haga clic en el comando S ve cel meni Fie para guatdar su trabajo Consejo: Cuando corstruya su programa, Vrual C++ qvords automstcamente rua (ulead los archivos que no Se haan guerdaco. Generar y ejecutar el programa ‘A continuacién debe compilar genera: el programa y ejcutarl, He deserto la compilaciny la gensracién er el Capitule 1. Corija cualquier enor de gerera~ idm que encuentre. La Figura 22 muestra a salida del programa Hello justo des- puts de que se haya ejecutado 48 ppsWOAMICROSCF” VISUAL C+ 60¥A Figura22.- Salo ae la aplicacién Hello. C++ EN HELLO Laaplicicién Helloes muy simple, pero presenta los siguientes elementos de C+: 18 Comentarios de C+: . rectivas de preprocesador utilizadas para incluirarcnves de cabectra y bbliotecas = Constantes && C+". i Palabras clave de C++ 1 Literales 1 Sentencas i Variables y tpos de datos 8 Cadena. ss Reservar memoria para las variables 1 Pardmetts y funciones, = Prototipes de funcion, ‘= Cevolver un resultado de usa funcién, 1 La biblioteca en tiempo de ejecucion de CIC+. 18 La funcion main 18 Cperadores y expresiones 18 Sentencias de control de C+. 18 Entrada/salida de C++ mediante iosteams, [sic es un terrorio bastante mplio a deseribir, vamos a empezar. FUNDANENTOS o&c++ 49 Comentarios de C++ £! programa Hello contene varias comentarins. C+ uiiza dos barres melinacas (i) para empezar una linea de comentari: “Todo lo que haya en la misaa linea después de las dos barra incinadas es parte del comentario, S. desea anpliar el comentario a mis de una linc, cada lire Ucheria empezar con las barras ixlinadas de comentario. También puede empezar ‘un comentario después de una seitencia C+-, como ést: ‘También puede utilizar Ios ¢elimitaderes de comentario de estilo C: Al contavio que les comenterios de estdo C+, éstos pueden extenderse por tineas multiples, Come guia exslente que omenta los estos y ettac mil ecsas {que cualquier programador debe ia saber, lerecomiendo Steve McConnell, Code Complete: A Practical Handboocof Software Construction (Microso} Press, 1983), Directivas de preprocesador ‘A continuacién de los comentarios que apawecen al princip.o del prgrama Hello aparece una drectiva #nclude, Como el leaguaje C, C-F utiliza un preprocesa- dor El preprecesador sun programa quese -ecuta antes qus el compilador. Bisca las directivas de preprocesador :0mo Fl preprocesador reemplaza una directiva Hinclude por todo el contenido del chive nombrado después de hi directva. En Hello, e incluyer dos archivos, Stadfihe iostreamh, Hablaremss mas sobre los contenidos de josteam.h en bre- ve. El propésito de ineluir un aechivo es pesmitirle que utiice las funciones,ela- ‘es, variables y otros elementos de cédigo definidos ahi. El asisteme afiade una ditectiva Ainclude para Stadfx.acomo convenio, no hay nada de importancis en tse archivo, Se proporciona en caso de cue quiera incuir cualquier =6digo MFC. Consejo: _Lerecamienso que sia a utlzr MFC utile la opién AppWizard de WFC (ere) en el cuado de adlogo New en luga’ de crear une epiacion de console, qu? se (Geeite en une ventana ée MS-DOS Algunesaplzaconestenen sentido como aplicaciones 4 cons, incuso son MFC, pero NFC se uiza sobre todo para escrbic aplicaciones de | Windows. y ée ese objetivo de este hbo. Sin embargo, si dejames # nehadeen lugar de Stadio pass nada, as! que simpemente lo gnorarenes LL corchetes angulados alrededor del nombre de archivo iostream h irican {que «un archivo incluido con sa sistema de Visusl C++. El preprocesado- sane inde buscar tales archivos. Hello también muests una diectva include que fencier un nombre de archivo entre comillas. Indican al preprocesador que el archive es parte dl programa. El preprocesador busea primero en el directorio Actual, ya continuncién busca en una ruta que puede definir en Visual C++ uti ‘zando a pestafa Directories en el cusdro de didlogo Options. Abra el cuadro de ‘idloge Options con el comando Options del meni Tools, ‘Cada diteciva de preprocesaior apareve siempre en una lines por si sol, ea- ‘menzaado desde el margen més ala izquierds al contrario que la: sentencias C+, ‘no tenina con un >unto y coma, Le explicaré las directivastefire en la siguiente seccibn, Constantes de C++ Una ctectivafdeffve indica al preprocesador que reemplace wr smbolo por su valor en cualquier siio del archivo de programa, Aqui, el simboloes YUMERO_UND, yelsaores f Uns directva 4defne le permite defini un nombre con sigrificado de forr {que el »6digo no ext leno de nineroseriticos. Esto hace el etsdigo mas leible Tambien pued> definir una constante en lugar, ce modo ques tiene que can biarla ms tarde, mo tenga que buscar en todo el programa las miltiples apericio- res de esa constant. Per C++ también proporciora una forma mejor de declarar :onstantes, a de- claraciin const. Aus tiene algunos ejempios: El enfoque const es normalmente mejor que define porque es un tipo sequr. (C++ comprueba para asegurarse que los datos con los que se ba inicializado el simbel> son cons-tentes con el tipo declarado después de la palabra clave const. ‘Nontra mente deberia uilizar cons en lugar de #define, ano ser cue vuelva a crear ‘una mccro de preprocesador de C+, un tema avanzado que este libro no explic. (Para cbtener una mtroduccin a as macros, examireel indice de Ayuda acer ‘de preprocessor, yelija el subtema «mactcs»,) Las macros del leguaje C/C++ n0 se deben confundir con las macres de VBScript que puede esritir en Visual C-+ para aulomatzat las tteas comenes, (Examine el indize de Ia Ayuda acerca de macro.) La palabra clave const tiene muchos uscs en C++, Ademas de declarar cons ‘antes con ela, puede hacer que los resltsdos de Funcidn y los parimetros de funcién sean de slo lectura, praegiéndelos aside una modificacien no desezda ‘Le daré unas cuantas rociones sisicas sobre la palabra clave const en «Pasar un ppuntero conse» en el Capitulo 3. Tambié puede examinar el indice de la Ayada acerca de const y elegr el tems «const» en el Visual C++ Programmer's Guide Encontrari otras drectivas ke preprocesidor mis alelante en el libro. Mien tras tanto, aprenda més sobre el preprocessdor, examine el Indice de la Aysda acerca de preprocessor y elija elsubtema «overview y también el subtema adi Nota: C+ es sensible ls mayigculas, en ots palabras, el identfcar BIG noes el mismo que igo big. Poner en maysculs los nambres de coastantes es Slo una conte ‘an que utiizen muchos programacore. Palabras clave de C++ (C++ reserva unos cuanios idemieadores pam uso propio. Por ejemplo, for, ifeint son palabras slave. No puede wiliza las palabras clave como nombres de vavia- bles, funciones, etc. Para obtensr una lista zstandar de palabras clave de C+ y una lista de estindar adicionales =specificas de Microsoft, examinee! indice de la ‘Ayuda acerca de keywords y els elsubtoma «C and C++ Ist. Literales Los lterales son valores en un programa, mpstramos algunos ejemp.os en la Te bla 2.2. Los Lterales son constates, y aunque se vuelven a almacenir en memo- Fia, no puede accoder 2 sus direeciones. Cada literal es de algin tipo, como wt, double 0 char*. (El aseiscosigsifica epantero ay, asi que char® significa wpan~ tero a char») Las literles de numeros enters se tratan como valores int con s8- no. Puede especificar lterales d=tipos de nimeros ente-os particulars uilizardo notaciones cemo la siguiente (ensulte In eceién «Variables y tpos de datos» para obtener mas infornacion soare los upos de C++); 1L.0 Hun enter largo (6 lee como cone-elb). 1U 0 10 un enter sin sig, UL 0 Fal un entero la . . sin signs « donde ces cualquier carter lita de tipo char 52 [APRENCA MICROSOFT VISUAL C+ 6.0 Tabla22. ConstastsIiteales conunes en C++ eral Desaipcion 7 a Nine decimal suas imo decal d coma func. 5E2 052 ‘Nima decimal en notin ceca ont ‘Nim enadecinl,bse 16 (29 dima) on Name octal se 8 (= 63 deci). Winds! Windows Windows! Cen er ‘También puede representa caracteres 20 imprinibles en C+: a0 inca nueva, =X tabulado: horizontal f= tabulador vertical. mb retrocese, mr rotomo de caro, 2 bara inclinada = comiia imple ‘=> comillas dobes. Sentencias Una sntena C+ na desacin simple, omando oles que termina con tim pnt yam Las dctivas de pepmceeadorno son sentenels come as ‘Rguluenc tes ejemplos de enc fds las waded Ta apliacion Hl: 1 const char* OLEFAIEND + “vlejo amigo, por ahora. * see oo. sxyaccabyen , Laprimera sentencia declarae iniciliza una constant lama OLD_PRIEND. La sogunda sentercia declara ¢ icializa la variable Hamada saCpp. La sentencid if una de las varias sentencias de C+= que controla el Majo del programe, si condicin entre paréntess se evalda como verdadera, se e=U ta lasentencia siguiente, una llamada e una funcim, FUNDAMENTOS DEce+ 53) Una sentercia compuesta es wa grupo de 4os sentencias @ mis combinadas en ‘una sentencia més larga. Por ejerplo, as res sentencias comtenidas dentro de los paréntesis despuds de esta sentereia while Variables y tipos de datos Una variable es una ubicacién ces nombre er memoria, un lgar para que un pio ‘rama almacere informacién. Ura ver dadcs nombres simbolicos eficaces, las Variables le ayudan a modelar el problems qe esta resolviendo. Los nombres de es, como cualquier identifcador (nomores) en C+, puede tener cualquier Tongitud y puede inclu cualquier cardcter tumérico o alfabético y el signo de subrayado, Nota: Se garastiza que ws variable: globale: ys variables locales decaradesexttcas 4 iniaizan a0 (cero). Otasvaiabes de C+, ircuyendo las verableslocaes no estat ‘as ylos miembros de dates de case nose inkalean automatcarrente, Hast que mic. lice 635 variables, su contenido no ets definido déase ebasuas). Hello witiza una variable, lanada s=Cpp- Declaramos e iniializamos s=Crp ‘al mismo tiempo de este modo: Lo mas importante de una varible ess tipo, El ipo de s:Cpp es char* (cade- na de earacteres). Ademis de los ipos estindar que se descrben en la Tabla 23, C++ le offece varias formas de cear sus propios tipos, como se rwestra en ia “Tabla 24. Estaes una capacidad sotente y C++ lo lleva ta Ijos com es posible Examine e indice ce la Ayvca acerca de integral pypes,y eli el subtema ‘table of». La Tabla 24 de ese tome de Ayuda cescribe ls amos de es tiposse- gn se implementan en Visual C++ (Tambign uede generar y ejecutar el prograra Sizes que se ensuenteaen VAprend.VCY a\Cap)2 del cédigo que acompa. El pro- ‘arama Sizes enumera tamatios de variable soriunes utilizando el operador sizeof) El tamafio de un tipo se mide bytes y le indica el rmgo de nimeros o carac- teres que puede tomar eltipo. Los tipos maeaos con el ealifcador envigned slo toman el valor 00 valores positives: 54 APRENDA MICROSO-T VISUAL C++ 6.0 YA FUNDAMENTOS DECes 55: Tata, erin ead, cn de tpn ie Taina : im Sacto iniog Tortie a Vn icy = seme BCom rr Sun tage core a Ramat sn, 1 wes avec nnne hyena et ra oat win si Bee se eevee sas meant pata ‘tan necesariamerte marcados por el calificador signed. tring esNane; // Variable String 7 Ti ange pian pea adn ea 0 Site rae te od Se te come i Ps le ie pr ees reas os om Be erste neste tee cyt re om 8 po eo oats onenciones de nombraniento de variates \ on Ce en ne tc Los programadores de Windows han adoptado durante mocha tiempo la prictice, de nembrar varices wilizande la notacin iningora (llamada asi porque s8 cxdea de carctees Conga xCadeas en et cpitalo dor. el desarollalor de Microsoft, Charles Simonyi, es hngare) La idea que sr Fans y puro Capital 3 APRENDA MICROSOFT VISUAL C++ 6.0 VA ace aa ntacin hingara es hace lipo de dts de viable pane de Romtre, como pede ver nls signs empl tpt, om ptr int. ts bone valor boots. fnCount, en valor ener Coca pejos un ce abreviao pra clio de dt ua se dsc te wr poco pip, peo compensa por sos pcos ees 7 mayor carl tam para los leetores de cOdign como para el propramador. La Tabla 2.5 muestra parte de los prefijos hingaros mas comunes. Table 2.5, Prefios hingares comunes par nombre arables refi hinge Tipe de datos . ‘nol 6 BOOE (boolean) i » ITE (han signo) cook lar doa ble fon oat f faction Lol ne nol aw > mero © ‘denn deliitad por om (cadens preci as ce Co {Cos con un sates Nola fal). ow (Onjeto MFC CSrng » pnt (ilizdo en geomet) es setigglo wnt 8 Matrices ‘Ye deberia esta familiarizado con el eoncepto de matriz, une variable que rued= contener miltples elementos de un tipo dado. Aunque las matrices de C+~ sot como las de C,con las que ys est faniliarizad> Explicaré brevemente age regs y sntaxis de las matress FUNDAMENTOS DECes 5S? Declare una matriz cen esta neticién: ine artaee(i0;; 17 Pipabase Nonbewma:eis(dimereién) El tipo especificado aqui es el 30 base dela matriz, el tipo de cads uno de sus sdementos. El nambre de ls matriz esar/nis (nga en cuentael nombre hingato que he utilzado), y se ha dimensionads para coatener 10 elementcs. Tenga en cuenta ‘que Ios indices de una matriz de C+ empievar desde 0 (cero) Es un evr comin indexar una mateiz para un bucle ge empieza en 1. El reultedo es que empieza ‘con el segundo elemento de la mat y a cominuacion intenta acceder aun elemen- ‘tw de matriz no existente més alld Gel final de I matriz. Nermalmente esto condu- ‘cea un rendimiento erroneo; es resyonsabililac del programadbr evita est error. Puede inicilizar una natriz cero sigue soe artnet) = (0, 2 O asi ne ormeets) Puede ajustar u obtener elements individua es de una matric utilizndo elope rador subindice de ls matiz(]. El eemplo de bce fr jus arriba muestra céme ‘ustar un elemento. Agu tiene un ejemplo de s6mo obtener ua elemeno: Ge a's arinteteount);—// int m= exzntel} Puede declarar una matiz para que contenga cualquier tipo de dates de C++ excepto las referencias. De este maco podria teser una matiz de char, una matrie ‘dedouble, una mateiz de foa, una matriz de long, una mati de struct, una marie ‘de algin tipo de clase definids por ¢ usuario, uza matriz de purteros, y ai sucesi- ‘vamente, Una matiz de char tambiin se conoce como una cadena de caracteres. (Consuite la seccion siguiente.) Coro verd més adelante, la nctacin de matrices ¥ la notacién de punteros son equivalentes Puede crear matrices de una o miltiples cimensiones para que contengan cual- {quiet tipo de dios (excesto una referencia). aqui tiene varias ilustaciones de ‘eclaraciones de matriz de una y dos dimensiores y acceses de matrz: carat} -ABRENDA MICRDIOFT VISUAL ++ 60 YA ‘as dos prineraslineas decaran las matrices de una y des dimensiones, es- pectvamente, La primera linea representa una c»-umna de grados de estudiine, Pa segunda lines representa cuadros de un tablet de ajedrez. Para espeitisr las como extracesn), Ia ecge de Ia parte superior. Las plas son estruturas de dates dltimo en entrar, primero en salt (LIFO). El timo elemento introducido es el primer elemento extsido, ‘C++ utiliza pila principalmente para invocaviones de furein. A metids que se irvoca wna fanciin, se intreducen vsrios elementos en la oarte superior de la pil: un dirsceisn de etomo para cuanco la funcion termine, cualquier parimetro ‘que e pate 1 Ta funeion, el resultado devuelto por a funcén, incluso las varisbles Toca‘es declaradas en la Funcién van a lapila, Asi que conform la funci6n 4 invo- cc le funcién & que invoce la funcién C, la pila crece. Como cada uns de las furciones retorra, C y Inego & y 2 cnntinuacién 4, los elementos de la pila que peitenccen s ese funcion se eliminan. La pila encoge ara reservar memoria ena pila, declare las variables loeales como en estos ejerplos Las variables locales se eliminan automaticrente de la pla (en el antiguo linge C, éstas se laman variabes auzomiticas 0 cute). Bs dee, cuando Is furci6n retoma, estas vetiables se dice que estés fuera del émbito, lo que significa que y8 no existen a enter ms ppg in gn cin a a ae en a Ee Se eset eee eeetys chores ar pesr i lato anlvaeeeed ps dipeamsuara taal ne ae ae eae oe seg Dima ope Se Bodoni FUNDAWENTOS OECe+ 63 La variable s el depurayde Vue C++, puede hacer que Su Crs esriba mens sobre cass eco dels memers en estaba aby dea ‘entane Output cuando i aplcacon termina Es sven comproba' 2 eed fens ‘Supt pra verlos menses, de foros que peed detector pronto hese Parametros y funciones Ya deberia estar familiaizado de forma generl con las fonciones (0 procedimien- tos o subratinas, como lo Haman algunos lengua). En C++ como en casi todos los lenguajes importantes, una fusion encapsula alguna accisn imporante que #1 programa toma. Las funciones son porciones nodulares, independientes de codigo Aue puede invecar mis de una veedesde difesentes lugares en el programa, Alga- [APRENDA MICROSOIT VISUAL C++ 6.0¥ nas veees puede itcluso volver a utilizar yng funcidn en otts Frogramas. La bi blioter de tiempade ejecucién C/C++, por ejemplo, es una col:ecién de Fenco ‘nes que se pueden volver a utilizar, ala que Tlegaremos en breve ‘Tiane funciones de distntos tipos: 1m Aguas fureiones toman pardmetros,y otras 19. Los parineos son valores ‘gue pasan ala funciOn, sobre la que basa su trabajo. Hacen una func:on de Jropbsito mis general permitiéndoleactuar sobre distntos datos de eteada 1m Algunas fanciones devuelven un resultado, y otras no lo hacen. En C++, ‘odas reciben el nombre de funciones indeperdienterent: de si devuelven sn resulade, Hay tes funciones en Ia aplicacion Hello: SayHello, SayGoodbiye y main. Say- Hello oma ées perimettos y devuelve un resultado, SayGocdbye no toma singin pardistr ni devuelve un resultado. SayHello y SayGoodbye sor funciones globa- fee, declaradas enel nivel global en lugar de por ejemplo, dntrs de la clase C+ abla ms sobre esto en la seccin sobre el Ambito del Capitulo 3, Tealista de parimettos de SayHfello contiene dos pardmeros formales. Los simetoe formales son lugares rellenar¥ que espevifian « quién invoea ia fan ‘Gione tipo dedates a pasar ala fancion, Cada parametro formal rene dos partes el tipo ds pardmetre y su nombre, justo igual que las declaraciones de parinetos boot Sayiiel:o(chas* 4x79, Sat neared Elprime paramezo en Sayfllo ex clip chr® (0 pune a char) ys star To E segundo parimeo de Sayelo ox del tipo ty slams nile Canc lavocames Say Hello le pets los pardnetros atuaes (a meno i= Stad rgumentcs de facil wala 2Cpp om char como primer prime: tro) el numoo eer eral como segundo, Lainvocaions parecer abré mucho més que decir sobre los pardmetos desputs de haber explicado los punteros y ls referencias en el Capitulo 3. Tenga en 2uexta que fa funcién ‘main toma dos parametros. Dire més sotre la funcién mair mas adelante en ete capitlo, Protetipos de funcién Las fist Say Godin aprecen or ees nell, La ine ston as especiales pos nomen y Has de pasimeo de Ta fe TES rimerapancin se llanatun proto defen. Aqut Be nuevo esti 108 prow pos de furson en Hels FUNDAMENTOS OEC#+ 67 La segunds vez que se utiliza estas fanciones es en la funcién principal. En este caso, los nombres de funcida tienen que declararse antes que Is principal esi {ue el compilador puede comprotar los tipos de pardmetos atuales con los tos de parimetros formales. Los cuempos de funcién o definiciones, vienen después No hay necesdad de cistribuirceclaraciones y definiciones de este modo, sin embargo, podsiamos igualmente roner las de iniciones de funcién completa ances que main y saltar los prototipos. Me gusta poner main up front, asi que utlizo prototipos, Mas tipicamente, los profotipos estarian en un archivo de cabecera(in- ‘ude .h) y as definicienes de f.acién estarian en un archivo de impiementaciin (Copp). Mostracé este tipo de distrioucin mis adelante en «Archivos de eabecers © implementaciém» en el Capitulo 2 ota: eclarey defi ls temines importantes Una decancion declare pblicamente lin tpo, nombre tae prdmete deretomo de funcsn» tp de vtbl, promo hace qe se reseve nada e memoro. Una delinsn o mplemertaion Vena eve ‘els fancionesy hace que se reze memota, Une sentence es na deri 3 hace ues reserve clagueramacenamnto, Pr seep, la sentence it wa amaceno- ‘cto, quces na Geist, Ur prototps tr uncles sacrament, {ue es una deacon. Nermalmente una dfeicén puede una decoration nods Sein nombre pr primer ve en tn -amt partcrartssmine ence Se Ayo ‘Scerca de decoration statements Devolver un resultado de una funcién El prototipo de SayHelle lo muesia devolvierdo un resultado del tipo bool, © beo- leano, cuyos valores posibles son rue o flie (ono cero y 0). Las funcines boolea- ras normalmente devuelven uno ce estos valores, dependiendo de algunas conci cones de la funciéa, En SayHello el resulad> esti deterninado por ls evaluacian de una expresiin en la que estéimplicada el parametro de entrada nCale. En g2- eral, una funeién puede devolve: un resultado de eualcuier tipo de datos. Tan- bign puede devolver un puntero «una referemia. Explicaré estos més adelante en el Capitulo 3. También explicaré algunas precauciones a la hora devolver estos tipos, : Usted devuelve el resultado eon la palabra clave return. En una funcién que devuelve un resultado, cebe invosie return y sspecificar in valor del tpo correct ‘come su resultado, ‘También puede utilizar retur en las ‘unciones que no devuelven resultados (funciones con un tipo de retoma void). En ese caso, ne especifique un valor de etorno. El prepésito de este use de return es retornar antes cuando algo no sea APRENDA MICROSO™T VISUAL C+ 6.0YA ‘correcio, o cuando determina qu: et resto dela furcién no debe ejecutarse Aqui tiene un ejemplo cue retoma antes cuande las condiciones no son corrects void ayrunction{int overen) fetnparam <21) Frobablemente hays notado que la furcién maix también devuelve un result ‘do, mint. Dts mes sobre esto eutndo explique mait, més adslane en este capitulo, La biblioteca de tiempo de ejecucién de CIC++ CCuanco necesite walizar una tars expeciica, puede que no tenga que volver ain- a rueds. Cida compiador de C 0 C+ proporciona uns bi ioteca de funcio- hes ites, constates, variables j tipos llamada Bilioteca de tlompo de ejecuctin, ‘enicamemia esa biblioiea ses parte del Lenguaje, pero ee una necesidad cestincar para cuelquier implementacion del lengvaje. En Vistal C++, Cy Cr ‘tiie Ia misma Ciblioteca en tiempo de ejecuei6n Sus elemenos estin dentro de las siguientes eatgorias: 1s Accese a argumentos (paca funcioaes con nimeros de argumentos. 18 Manipulac én del biffer. Un buffer es un bloque d= memoria que puede cxamirar ymanipalar a tavés de ua punteroal blogue. Esnormal, por ejem- plo, leer ur archivo en n bier grande de la memoria y trabajar cos el batferen ligar de hacerlo directantente con el archivo. , 18 Los elementos uilizados para trabsjar con Ins sistemas de caraeteres multi byte (come, por ejemplo, Unicode). Ls sistemas de caracteres multibyte st tllizan pa lenguajes como chino japonés que tienen an gran nimero de tcaracteres y necesitan mas de un byte de almacenamiemo para representa ‘cada carder posible. 1 Conversa de datos. 1m Depuraciés de funciones utilizadas con la version de depuracién de lab blioteca de tiempo de ejecucion = Control de dirctoros. ' 'm Manejo de errors y excepciones. Las excepciones proporcionan un met nism oral pra respnde s condciones inxperaas, como ques, ‘memoria ce pila @ no encontrar un archivo. 1m Manejo de archivos. FUNDAMENTOS xcs 59 Soporte de coma flotante. Entrada y salida Funciores uilizadas para facer versiones intemacionales de su programa, Ubicacién de memoria Control del entomo, Biisqueda y ordenacién, Manipulacién de cadenss. Llamadas al sistema, ‘Administracin de tiempo. Para encortrar una funcién ti en la bblibteca de tiempe de ejecucién cuando no esté seguro de las funciones sisponibles para lo que quiere hace, examine el Indice de la Ayuda acerca de FUNCTIONS ‘con las letas maylsculs), cor ‘uacién elie el subtema arunctire by catezery. Si conoce el nome de Ia fun~ cidn, examine el indice de la Ayaia para sl rombre. "Ademés dela biblictses de tiempo de cerucién, Viseal C! | incluye la biblio= teca estindar de C+, una biblioteca de funciones y clases basada er fs plantilas de C++, Puede utilizar a biblote:a con MEC, pero este libre no explca las plan tllas, ast que no explicsré la biblioteca estincar de C+ con més detale. Examine el indice de la Ayuda acerca de sandard C++ library overview. ‘También le puede ser de utd Ia referencia de lenguaje de C>* de la Ayuda de Visual C++ Examine el indicede la Ayuds acerca de C4 language reference. Hay también tna referencia de lenguaje de C. La funcién main Siguiendo la drectiva tinclude de Hello, 1s prototipos de funcign y ls definicio- nes constantes, puede ver el everzo del progrima. Todo programa de C++ empie~ 2a ejecutando ana funcibn llamacs main. La fancién main en un programa de C++ es una funcion especial que siemae tiene ol rombre «main», pero eseribalo. Aut tiene main de Hello: Ine main(int rye, chart axgr()) ¢ t [APRENO# MICROSOF” VISUAL C= 6.0YA. are ilstearel papel de main como «maestro de ceremoniss» del programa, i secuencia de suceses en la jecucin de Hello va del modo siguiente, + Hera acabo algo de configuracion preparatoria, rain comiciza a ejecutarse rain declac ¢ inicaliza la variable s2Cpp. Esto reserva almacenarrieno Jara s2Cpp en la pila del programa La cantdad total de almacenamieno ueda deterninada po la ongitud de Ia cadana de inicalzacion. Consulte Cadenas», antes en este capitulo, 4. main invoct la funcion SayHello, Los parietros de Say"fello estin colo- ados en apa, junto conel espacio para el esultado dewielto por SavHe- To (un boo ean0} | SayHello se ejecuta, primero imprime un mensaje (Ia sentencia que implica ‘out, que explicaré un pozo més adelante), 1 continuacign evalia ua ex presién que implica nCaicy, inalmente, devolviendo el resultado de la bvaluacion a main 6. De vuelta en main, el resultado de SayHetla, un ato: booteano, se wii ‘como conden para una sentencia if. Si SayHello devuelve verdadero (lo hhave, dande estos parimttos reales), la senteneia dens del bloque de en- tenciasejeruta una invocscin a le funeion SayGooabye. Si SayHelloée- ‘vuelve fal, el euerpo de la sentencia ifs salt +7. En este eas, SeyGoodbye se ejecta, imprimiendo un mensaje. No tay parimetros, variables locales o resultados de funciér a solocaren la pila, pero se alnacena ahi une diteccién de retomo de mode que la ejecucion uoda volver a saltar @ main en el punto justo después de que se iavoaue SayGondbve. 8. De vuelta -n main, la sertencia ifte completa cuando SayGoodbye rtorna y se encuentra la lave de eierre de la senteneia 5, Cuando la funcién main sleanza la sentenca return 0, lafuncién deveve tl valor, I que indica que todo fue bien y € programa termina, La func: Iain podria devolver algin otro valor si se enevenira eon cualquir oro problema. [Avigual cue etras funciones, main puede tenes un tipo de resultado (o puede cesperficar vid) Si declara un tipo de resultado, debe tener ura sentencia de r= tor en la funcicn del modo siguiente: FUNOAMENTOSOECe+ 71 > a fren main tambien pede omar primes, come se macs cont fine maincint aege. chas* azcv(]) {Los parts pants a men le permit accede culquer ugumentoe- pecleuo enn inc ds comands tua recta cl rogram rtm euro de MS-DOS. El yartmete are le ica cunts arguments expectcaom a = uta el programa (mds uno) El arimete ang x un ati de cadena emis Given send le cote renee, dni ie coans el parimetro orge parala funciéamain de Prog fe Pogramaprucba tiene un valor de 4. EL fambre del programa eel prin price, junto con su ras completa, ise almacena en C:\Programas, ls vlotes alnacenados en argv[0) hasta argy [3] son: No utiliza Jos arumentos de tinea de comandos en exe bo, pero como -AppWizad eeribe main de staal Io deja. ® Operadores y expresiones Una sentencia cia cuyos componente se evallin a un valor sencillo se dice que es ‘una expresiin Por ejemplo a spent esa expresionantmética; Ya siguiente es una expresién tooleana (logic): {Un opera define ua rela ent ds operand. + operands Por jenn lope dor’ que significa menor que, wlio: les aperandin, xy, er express 72 APRENDA MICROSOFT VISUAL C+ 6.0Y, Theale te bole anterar. C+ iene opeaores itn, gis yrs, ques de eth 28. operadores de C+ eriben en la sguest seein aaVv—_eEAr~—erh Gregor Gisperndor operadores tiemslos Comentarios Expresiones | Arinético + Suma aes ‘Méidulo da el resto de dividir sus fl reaitado devuclo por SupHelo exh determina po la sgiene expres Res ia srmandee El esa = Matpticaisn 3 rocna da unset (scale + 29) < @2uneate? x Mone a tneate + (ncnte te Moule sea ta expresin particular es una expresin reason, Seevalia a verdadero 0 lajwy SMe go tea Losopenires ligt como 8 falso, cependiendc de la evaluac:6n de 1a primera subexpresion, sehcossl ‘Mayor que feet 'y || somaran dos condiciones -ara pani " a Menor 0 ig ieee Somproba son vars, abs Jal Mayer tal PS eaten yy epee fncate + (ncate + 2 teon ii Gh Unnecequ cet a Siow 1 to Saka qu spss es meror qu a evaluncidn de a segunda subexpresion. AND lg ena ti coz Semis prone een Onopko Seat [[ font Pores el pow ped t24penes Nor tbe "Sead defer tunel opin dee ‘rrsn ohne Coens en a compari ‘tons cn gt Agni i nparacion: ‘true = false y Mase = true. (Les sino fc se an Sy teetoatetdne’ 7)" “otbecpreetons sai ekisimaiedaia leo enema ij a forme bt profi treet +s una expresién aritmética que se 2vs — (Hi Incremento pretijo -o decrementa la varable antes Je auneimere Desens pete Spin operon ive = Nena a Ee ei ar sey i Se Deslammioingds de it ayn c< 2 ample nb nds operadores 3S Degsmen Geo debt" nyint “= trae etp see FLAG La eagrsin sent anerior sta varies operadores de C++ (uma), * (n= eRe Tint laa yout cer ifemein Tipuceony {menor que) 9! vision). Ademds oe estos operadores scons [coin Grint | ras ied rvs bia de ielyartmeizen = inlay muchos oto, como se mesa esa Tabla 26 98 ri mint! ran che ‘lewestos en euaquiera de la mayoria de los operadores soa operandos, Para 00- Aszecin = Asigncion Sixes3xt Led IEE" Normastr hdictonal sobre ls opcadores de C+, examinee inc 1 Ae oman ' Ry aceeade perrors eel ema eC opeatron Sama es sp Mata agar Doe se Precedencla Nod, sme Desplzamnto aqui, asgna- Desplzamsnto derecho, asignar 2 de bit sae |e, asgnar Xor de bits aig [Algaros operadores de C++ tienen precedencia sobre otros dumnte la evaluacién de In xpresion. Ror ejemplo, la muliplicacion y la division se evalan antes ave Ta suma y la reste en una expresin come ésta eeaearaes teas 74 APRENDA MICROSOF VISUAL C++ 6.0 YA Table26, ceredoes C++ comhuacin) Eegora Geoperator Operadons Sempls Comentaon a wise okie) eof devel ine de ty dei a eientico > sos eke seismic ee wm a ‘aliernativa basandose en uns Senin ome comp, ‘fae dn pein tn arp cave oven enti esto cosmic); wea oe a nomi ib Since ve mac ence Rtsaealenen deh mae 0 Lime cen Ticats toe et Leen ——ansmcamiant yd moc pe SESE Sime Sueojtonetone poe npn oe Fos momar poet coer oo), tena pe. ae Ute moo Zhe pss beer poe ee Beate Geta ne wi Nec SSP Shoesy Diese eae eum dei & Discein rs ness rn = ec ia a Tea detno Tne 4 Sothys Conley an ele et gocoe ime ts act Gate wn Ci cons ; fortune = 0 Pade anon side Pn Capes os co LAM iikeveapeae a serena, Las express ‘ran de uid dra. So aa ver espeificada la jon y a continua ign s division,» luego la primera y la segunda sum, la expresin da come res tado “7, como siestviera entre paréntesis erate sass 245. Evaluando los paréntesis ms interions primero, llegamos 2 6 + (12/2) 8 1 continuacién, valuando los paréntesis que queda. legamos a 6 + 6 +5 = 17. Sin is reglas de precedencia (0 los paréntesis), trabajando estritamente de i2 ‘Quieria ‘a dovech, la expresion original deberiaevaluarse en 23. Al adoptar aif” fis precedenciag como por ejemplo + y -, se eval. a otros vaares. Los ops Fuvoamentosprc++ 75 ‘es con la misma precédencia, cmo por zjenplo + y~,se evaliéan de izquierda a ‘erecha, Las reglas de precedencia de C++ evitan la ambigiedad, peo puede ha- ‘cer sus expresiones mechos mis legibles y menos propensas a errores utilizaado paréntesis generosamente Para obtener mas detalles sabre la precedencia y Ia asociabiidad, el order. en 1 que se evalian los operands rarticulares, de izquierda a derecha ode derecka a ‘nguierda, examine el indice de Ayuda acerca de operaiar precedence. El error de operador més comin El error mis comin con los operadores ese” de utilizar el operador ce asignacion (©) cuando le que quiere es el cperador de igualdad (~) Por ejemplo: 1806 En lugar de comparat la viable ¢ y el caricter a en igualdad, eta expresign signa el valor @ a Ta variable ¢ (y en este ejemplo, a condicion f es siempre verdadera, cosa que probablemente no se pretendia). Un medo de eviar este emtor ‘demasiado comin es irvertr ales expresiones como un problema estindar de psic- Esto genera un error de conpilaciér parque la asignacién no fancionaré en cesta direceibn. El erro le indies que escribe la expresion como: {que es lo que queriams decir desde el pi Sentencias de control de C++ ‘Como SayHello devueive un vale bool, lara la funcin justo er la sentenca if cen la funcién main de Hello, de este modo: Seytooabye0) Pods hacerlo con mis palasas, utilizando una vaviable extra: ‘ Saycocebyen: 76 APRENOAMNCROSOFTVISUAL C++ 6.0 YA | reultado de Suylello es la condicién sobre Ia que girs la sentencia ¥. Si “Sayllele dewuelvewrdadero, se eeuta el everpo de a sentencinif en este cas, In invocicion a Say inode. Si SayHello develve, SayGoodBye no deberia cj Ccuarse, Deberi ester familarizad com la sentencias if, aungne puede que piense (gue lasntanis cc C1 parece extraia, La Tabla 2.7 ruestra tna sentencia if mis Completa junto con otras estuctuas de control de C++. Puece unider esracturas de control, ura dentro ale otra El ejemplo para a ‘sentencit continue ela Tabla 2.7 muesira una sentencia fanideda dentro de un Ducle wAile. Puede snidar cualquier de las estructurs dentro de cualquiera de las tras y ro hay Tits para el nivel de anidacin Por ecto, he utlizado llaves para el cuerpo de la sentenca ide main en He- Uo, Con una ltica sentencia a ejeeutar cuzndo Ta condicin if es verdaders, las Haves no son real Sincoosbye Pere utilizindols consstenteriente le ayuda a ev:tar muchoserores. EntradalSalida de C++ mediante lostreams El archvo iostreamh de Hello define la forma C++ de evar a cabo Ia entrada y salida, Un iosteam es un objeto que trata Ia entrada o saliéa como un fhjo de “ebla2.7.Esryturas decontotde C++ Extrctura de control ‘ Ejemplo SEU 4 $50) ‘ , Comentarios ‘Conroldeamiicnin. Le pemite rei: distin coms ‘aj diferentes condiciones se Yee som pedals. (contin abb2.7.Estructuras de contol de C+ + (continuation) Farectura de control ‘ > Ejemplo ) wntletbie c FUNoaMENTOSDECe + 77 Comentarios ‘Corl debacle vali a ‘oni antes de eaten et jeune 5 inlet fs B contador, cf ormmente m mado ‘utara conden de termina pra el bel. (Chui expres boolean eh sai Cott debacle. Sempre ejecta semenca al menor un vez, 2 ‘Sotinuin els condi, Usiea tna variable ooleana Fra la condinn. Conde base. Fgcuta as trmie de la enon El Inde dl ble ve inciaiaa a trans d I condi int, incemena (0 dexeneta) or cori ne, Nos No pude ina ab ner nel siguente bce for 4 no = ti lpm befor haya ‘eminato Escome ise bbl deslardo Control de remiss ‘nfs, Esti curndo Atentva ex un sentencia if Snilads profraent. Fes en 1 de Maes pr cones tnlphs instucies pres (omnis) 7B AORENDE MICROSCE VISUAL C+ 6.0 VA Tabla2.7. Enructuras decontrolde C+ + (continuacn) Entrctura de control Ejemplo Comentaios break Cconsulte el ejemplo de Fala tapas eocerade ra mviten anterior gue den entencin wile, da, foro mice. continue wnitetx < 2900 ‘Se le dela tenia t comienzae lasiguienienciin seconen) (2 cle while doo for. , to goto eeiqueta: “Transfers Hoon 17 Seneancias nto agate site Aso: ersquete No ilice soo datos. Usted ervia a salidainsertindola er un flujo ée sada y cbtiene Ia ertrada cexrayédola de un flyjo de entrada En tello, wii fosiream en SayHello y SayGoodbye. Aqui tiene un ejemplo de Savilell: ta linea inse-ta la cadena «lola, C+! eres el nimero Tren un objeto de flujo de salida llamado cout. El eto cout (pronunciado «sce-cut») es un obje'o {strain estandar ce C+ que hace referencia ala salda esténdas (como stdout e0 (©) quenormalmerte se corresposde con s pantalla, o con una ventana de Is pa talla. Fay un abjeo de flujo de entrada correspondiente lamaedo cin que hace referencia a la entrada esténdar (como stdin en C) que normalmente se correspon ‘de con la palabra clave. En Visual C++, si inserta la eadena en cout utlizando ‘operader de insercién (<<) provoca que la cadena insertada se visualice e1 ux ventans de MS-DOS, como se muestra en la Figura 2.2. FUNDAMENTOS OE Cos 78 El primer operado de inseraiin en SayHello insert la sadena lieral «Ho's. ‘Los demis operadores de inserain continian el flujo snserando, sucesivamente, el valor del parimetro s2To de SayHello,otr cadena literal; el valor de la consan- te NUMERO_UNO; un punto; y nalment, el carécter especial llamado linea neva, simbolizado por \n. Este caricor es parte dela salida de la cadera, asi que se Coloca dentre de las comillas. Eleardctr de linea nueve le indica a cour que texmi- rela linea actual y empiece ura linea nueva. Si no hubiese més slida en Hello, iri ala lines nueva, (La salida, como se ve en la Figura 22, va seguida del texto ‘Press any key to cortinuen. Este texto no es parte dela salida de Hello, Visual (C+ Io aliade para inéicarle cbmo cerrar la ventana de MS-DOS cuando ha termi nado.) En el flujo de sala de la fencion S2yGoodbye, hey una diferencia, En lagar de utilizar Wn para terninar Ia 1aea de salida y empeza- ot, utilizo un manipula- un nimeroy pulse la eclaINTKO. El valor teslea~ ose extrac del flujo de entradas la variable m. Aqui tiene an bucle simple que lee datos por medio de cm: C++ también aplisa un Mujo de sada de mensaje de eror, llamado cer La faciidad voseream incluye un mecarismo para conectar un flujo de enzada 0 de salida «un archivo. Para notener rs informacion sobre la corexién a acl {os w otros aspects del uso de ‘ostream en sus programas C++, examine el indice dela Ayuda acerca d:iastrean y elijael toma «iostream Programming». 80 APRENDAMICROSO"TVISUAL C++ 6.0 YA En C++, los obetos iostream ocupan el puesto de funciones como Pritt en Basic. MriteLn on Fasal y prin en C. (Las funeiones de biblioteca de tiempo de ejecucién, come priuf. todavia estin disponibles en C++ porque C++ es un stper. {canjunte de C,) El sso de objetos ‘ostream es el modo normal de evar a cabo entrada salida en Ct, Sin embargo, el inieo sitio dnde los ilizar en este thro ‘sera er Bs Capitals 3 y 5, donde eseribimes el cddiga en bruo d= C++. Desde el Capitule 6, adninisraremos entrada y salida de forma muy ciferente, wlizando las facil dades de MFC y Windows. YY at tiene Hells, aungue todavia nos queda mucko para temminar con C++. Le veré en Capitulo 3, después de que haya experimentado durante un rato Inténtelo usted mismo La mejcr forma de aprender C1 es escribir cbdige ¥ ver lo que pasa. Le rece- ‘miendo que compre un buen libro de C'-t pero este capitulo, les tres caprulos Siguieats y la doctmentacin de Visual C++ le proporcionarin ls mayor pare de To que recesita ‘Si ledavia no he trabajado conmigo a lo largo de capitulo, le recomend que ‘yuelvasobre sus patos y teclee aa tno de los ejemplos y los geere. Son breves, y le daren una mejor compresion de la estructura y lasintaxis de Is programas d= ‘Crs ycimo pereraros con C+. No puede consegur esto del mismo modo, sim plement, leyendo. ‘Si tiae problemas a la hora de generar los ejemplos, puede que quiera seguir dela hasta el Cepitulo 13 sobre la depuracion Después de generar un ejemplo, experimente con él. Elimine, aiada y vuelva a ccoloca las cosis. Comente las linzas de céigo precediéndolas de barras inclina- das does (). Escaba sus propias variants y vealoque pasa. Le pondré trampas ide vez en cuando, fero tambien aprender bastante con esto. *+ tienen acceso a una variable, tfo constante 0 fanciGn dads? Esto varia depenciendo del émbito en que sea declrado y utiliza dol elemerto. Considere el povgrama Seopel Inténtelo ahora Cree el programa Scepel come una Win3? Console Applicaton. Siga la msma direccin ena seccién «Hello C1» en +1 Capitulo 2, pero nombre el proyzcto ‘Scopel, Edite el archivo Scopel.cpp y hage que su araivo aparezze como uno en la pagina siguiente introducienco el ebd'gc en negrita ger ao) > ‘AMBIT, PUNTEROS Y REFERENCIAS CEC++ 8B Scope 1 muestra los siguientes tipos de érnbito: '= Ambito global (ahora llamado a menudo Ambite de espacio de nombre). Los elementos delarados er mbito glcbal son visibles a lo largo del archi vo en el que se declaran y umbién se pueden hacer viibles en otras parts del programa, (Hablaré mis sobre esta en otro momento.) La variable nl declarada fuera de main es global, asf cue podemos acceder a ella en main para examinar o eambiar su :ontenido, Est n/ esti visible deme de main y de las funciones /7 y /2. En particular, es visible en cualquier parte del archivo Scopel.cyp que sigie a su dec aracién. (No podemos acceder a tl antes de que se declare en el archivo, La variable n? de main iluse ‘mismo concepto, Por encins dela declracin, n2 no se conoce, Por debaie {el mistro,n2 es visible. Las funciones main, 1 y (2 son también globales, Ambito local. Cada funciex u otro blague (cédigo rodeado eatee lla define su propio ambito loesl. Una variable declarada dentro de main. 10 PP no esi visible fuera de st funcidn, asi que puede declarer una nueva variable local n/ dentro de a funcién jl. EI nombre ni se puede volver a utlzar dentro de fa funcién Sin embargo, se dice que la variable n/ de funcién ff oculta la variable global nf orque ambas tienen el mismo nor bre. La sentencia ce salida en 1 muestraesto: el n! que saca es 88 propio! local (valor 10) Ex,2, sin enbargo, 10 tay una variable local n/, ast que sentencia de saida ahi sacaam/ global (valor 1). Puede poner scmo pefiia cl operacor de resolucion de mbito (:) a n/ dentro de f1 para hacer que hhaga referencia a n/ globa! en lugar dea Ian! local (iaténtelaen Scope! ‘Tengs también en cuenta que los parimetros de ‘uncién, como m, se com: sidera que estin dentro del imbito loeel de la funsién. En otras palabra, cestin visibles dento de la fincién. Y finalment, igual que mais no ped ver elementos declarados en 7, 1 no puede ver elementos de main, aunque ppuede que esperase Io contario. El imbito global esté fuera de main y de todas las funcioner. ‘= Ambito local subordinado (que se muestra come un par de laves dex tro de uaa funcién). Dentc de la fancsin f2, hay dos émbitos locales st- Dordinados. El cuerpo del ble for es uno 84 APRENDA MICROSOFT VISUA. C++ 6.0YA + €l parde Haves que aparscen a continuacién definen el tro: ‘Vanos a echacun vstazo mis de cerena los dos émbitos‘celes subordinados. ‘Aguitz muestra emo funcionan las reglas de ambito para e! bul for y el par de Ilaves siguientes en el programa Scope. 1m Dentro del bucle for de f2,e1m/ impreso es el n/ global visible tan profin- {Yo dent de los dmbitos anidados porque nigginn/ local lo oculta. Fodri- tnos declarer un nI nuevo dentro del bucle fer, y ocularieelnI global. iin ‘éntelo! 18 La variable de contol de bucle del bucle for, se declara dentro de l abe eta de la sentencia for, pero noes local para el bucle, aque esté en varos idiomas. Tedavia puede azceder al valor de i después de cue el bucleterni- ne. La sentsncia cout que sigue al bucle muestra esto: aca «Desputs del bool for, 1 10», Be coms I variable sxe declarase anes de Ta sentensia for, del moo siguiente: 1 lotro émbito local, delinitado por dos laves desputs del cuerpo del bucle for. es otra Bloque, Si declardsemes un n/ dentro de 2, pero fuera e este blogue, y acontinuacién declarésenos otro ni dentro de bloque, el in- terno ovulteiaelexterno, (Un blogue semejerte se ulizaa veces para loca Tizar un dtrbito de variable tanto como sea posible, dstrayendo la variable inmedinamente después de su uso en lugar ce mantenerla To que dure una funcién larga, como muestra la variable x.) SASSER ee dverencia’Imgine que fof cambio global, simperente vue a sar ‘serie Es aon elect aera fl invcador Ce fancied que e272 “A ttnecene dl fects con consecrate plgroses. 0 ea! Sect erls uceresutados de funcony paramos par carbar varisbks > ntrno fuera Ges uncon Al hacer eto ja claro aves pret un cambio, p22 Se rae gob omar dm rama de un, ceo cane Sahat er mS explo: forme sir sosign un eolor de tone de fancen 00 arte glabae!tambioes expt yobvia problema con los efectos laterals esaut ‘Snail Icos on fcto al ts necoad ele ora pde one ‘remmistero Ad ue gun a en el futra se preguntard or qué su progae M2 Seer sete nas ie pasa aes dep solo. edge tambien OHS? desde primer men {A0901TO PUNTEROS Y REFERENCIAS OF +4 BS Hay una clese mis de ambito on C++, Hameada Ambito de clase, que deseribie tuando hablemos de clases en el Capitule 5. La salida de Scopel se muestra a ontinuacién. Mirando asta sala y haciend» referencia al eddigo de programs, puede ver dénde estin vsibles las dstinas variables nl y déade no, Después del bucte for, i= 1) ‘Aqui tiene otras dos situaciones especiale: que merece la pena conocer. Tie- ‘en relacién ccn la visibilidad de las variabls globales definidas en diferentes archivos, ‘= En la primera situscin, se define uns variable global xen el archivo A.cpp (decir, el almacenamiente para x se ubica en el archivo A.cpp) Suponge- ‘mos que ‘ambién desea utilizar x en el achive B.epp. Puede haver que x del archivo A.cpp sea visible exel archivo 3.cpp declaranco x en cpp con lt palabra clave extem, (Examne el indice de la Ayuda aerca de extern.) El programa Scope2, que se ercuentra en Ia carpeta \AprendaVCYa\Cap0S el eédigo que accmpatia, silustra util zando extern dz este odo, 1 En la segunda situcién, los archivos A.cpp y B.epp definen cada uno ura variable global m/nt, pero a0 se pretende que sea el mismo aint. Sino escribe mis cédige, obtendié un ero: de enlace porque ha definido dos vs Fiablesglobales con el mismo nombre (ixcluso estando en archivos diteren tes) Sin embargo, puede haszr que lat dbs variables sean distnts sin tener ‘que cambiar el nombre de ninguna dees. Defina slguxa de Ia variables 9 ambas cono static. 1o que hie que una variable (u ato element) sea invi- sible fuer de su archivo. (Eeamine el iadice de la Ayuda acerce de state. ‘También explicaré otros uss de la palabra clave «atic mas adelante.) El programa Scope3,que se excuentra en la carpeta \AprendaVC¥\Cap03 {el cédign que acompatia, maestra el us) de static como se describe aqui. Una cosa mis sobre dmbito: las variables locales salen del émbito al final de su funciéa (ano ser que se vuelvan a defini como estiicat). Cusndo ura variable sale del ambit. cualquier punteroo referencia a ella tiene un valor indefinide (Eeharemos un ristazo a los punters y referencias en breve.) La raz6n por la qu Tn que las variases locales salen cel Ambit «s que estin ubieadas en la pila, ‘cuando la funcién retora, odo el slmacenam ento de la pila que se hs asociade on Ia funcién se hace irdefinido, Ubicar una variable en la pila es como poner ‘ena bandeja de cafeteria sobre una pila de bandsjas. Cuando lafuncién toma, e+ como sila banda se eliminara dela pila de bindejas, desaparece, {86 APRENDA ANCHOSOFT VISUAL C+ 6.0 VA PUNTEROS ‘Unade las eaactristicas mis uilzadas ée C y C++ ese puntero, Como s mos en cl Capitulo 2 un puntero es una variable ue contene Ia dreeciOn de alsuna vbi- teacibe de la memoria, En la mayoria de bs easos, es la direzcign de ora variable, La Figura 3.1 muestra la relacion entce un punter y aquello ¢ lo que «punta, sy destiro, Los sunteros en C++ fancionan del mismo modo que 29 C. te paseo par los punteras eri necesariament: breve, pero lo suficientemente ampli como pars mostarle que hay bastante que aprender sobre los mismos. Ui lizaré varios programas pequefos de C*~ para mostrar lo siguiente: 7 1 Nombar pntros de forma mis ei 1 Manialarmaties y cadena ates de puteos uilimndoavimbice de printers. tsar puncos en parmeios de fai ywesltadon de ain f= Compreni que un puneo puede punta 2 muchas css: variables me Seer srt e ments ecard cons) ‘tos puntos. tm Ejercitar Is precaucién la hora de utilizar runteros. Fundamentos de los punteros ove progtana de C+ dea ign siguiente, Hamad Ptr, muestra shoe Scan neta eat un pune» sine seceer a cambiar lar del chet & ‘que spunta Dincndl Saunton corre ogo pris Sci dese Sigueseapune Figua 3.1. Un punteroy su destino, ‘AoaaiTo, PINTEROS Y REFERENCIAS DC++ 87 on Cree otra Wint2 Console Application Hamada Pointer, Deberia empezar a domi: nar esto a estas alturas Mneleds Gortzean, east) 2 punters. I programa Pointer declara uaa variable int, nVar/. Luego, la sentenca si- uiente crea un puntero que contene la diescién de memoria de nVarl, asi es ‘como pint apunta a la variable En la parte izquierda del operalor de asignacién, Ia variable pln se declan ‘como un punter a int. El operader de indireccién (*) nos indica que pint es un [punter aint. Ea la parte derecha dela asignac én, el operador de direcciin (8, | sampersand), objene la dreccién de Ia varab e Varl. La dircceién se asigna al puntero para inicializar su valor. Esto es lo cue es un puntero: la diveccién de alguna ubicaciéa de memoria APRENDA MICROSOFT VISUAL C44 6.0YA ‘pdvertencia; Es wna convencibn de los pregramadores de Miciosoft Foundation hss oerbilos punteros conf notacion que se muestra antenorente: in” MN. con Te eerie too de dots en ugar de al hombre de varabl. $n embargo, hay un Solr en ext prac sino tine undo, Cnsiere eas delocianes rimera vale sun punter ou: Anque 2 se nme omo un purer se laprsion primera varble cuando vanes vale se dean en mira ie, as cos formas siguientes sn coretas, peraconsigniteados dines a ro ME es ms laren serio en uv es renee pate del noted th. Foe Mr Sateand bs punters natipls dl smo tien luna nes os sentencics de salida sien sla asignaci6n del punteroiar*plnt = &nVarl: Muestrar dot hechos sobre los punters: tm nvVarly € objeto al que apunta plat tienen el mismo velor: plat realmente no apuntaa Var! 18 La direcein de nVar1 es la misma que et valor almacerndo en pint et8 sireccidn la que hace de plat un puntero a Fart ‘A contimacn, el programa Pointer muestra la sintaxis pura aceeder al valor de mVarl a waves del puntero a nVar!: soe oy emanate Re fee as eae ma Ces tyes rei ac wnat ns [ir'aUard = ‘pines 17 Operadee de dereferencie* ‘AMBITO,PUNTEROS VREIERINGIAS DE C++ 8D Nota: Muchos programadoresutilian la siguien'e convercién pra nomex punteroi ‘refjan el nombre de varable con & letra p,cono en pint. Donde es posible inten!> ‘hater el tipo dedtos para el que ese puntero. Eto me ayuda ano el punters “on el objeto al cue ests apuntando, Aq tiene mus ejemplos: pWindows (untero aura “tentang, person (puntere a un obo de penora). pDb\Saa' (puntero ¢ una variable ‘Joble que representa un slaro). Como lamaia in puntero aatrepuntere? point ‘Ademés de poder acosder al vs or en nVar! através del puntero, tanbién pue- ‘de cambiar el valor através del puntro: Esta vez el eperador de referencia aparece on la parte iaquirda de a semtencia se asignacin, El significado aqui es walmacenar el valor 200 en la dieccin apurr tada por pln» La sentencia de sada final er el programa Pointer muestra el valor reciente- mente asignadode n¥+2 y el valor nuevo de n/ar!; nVari empez6 ex: 100 y se ha ajustado a 200. En Microsoft Winlows 95, Microsoft Windews 98 y MicrosoR findows NT, se almacena un puntore come wa valor entera de 3? hte Conde oo «jccuta en mi miguina, la segunda sentencia cout del programa Cout da estas La direceién de memoria de nr] y la direceién almacensda en pit se mus ‘ran aqui en notacién hexadecimal (Consult a barra lateral «Notaciba numérica en CH», Las direcciones impresis pueden dferir cuando ejecute el programa Pointer en su sistema, denendiendade cons de-aciones como qué atts programas se estin ejecutando y cuinta RAM tiene, Tenga en cuenta que las dos crecciones son la misma, prueba de que lo queesta almacenado es verdaderameneuna direc cin, Notacién numérica en C++ Puede utilizar tres notaciones nuaéricasdferentes en C++: hexadecimal, octal y decimal. La hexadecimal y la decimal som las mis comures. ‘= Los valores hexadecimal, o ahex», se marcan con 21 prefijo «x» y conticsen nimeros en el sstema de bese 16, cuyes digitos $010.9, ya continacién A,B, C.D, E, F donde A= 10, B=, .. F=15. Por cjemplo OxE = "4 decima : Ox10 = 16 decimal; 116 © 0}. Puede uti- APNEA MICROSOFT VISUAL C4¥ 6.0YA Noracion numérica en C+# (continicion) lizar mavisculas 0 minisculas para Ios Aigitos alfbsticos, B es ‘mismo qoeb. 1= Los valores octaes (base 8), euyos digitos son 0-7, tien como pre jjoun cow. Por ejemplo, 07 ~ 68 decimal: 78+ 71 1m Los valeres decimales no tienen prefij. Por ejemplo, 9: 300; #4003 xccesorio Caleuladora de Windows para convert las bass, Hag cle en Cientifice del meni Ver de Caleuladara. Seleccione una} bas: Hex, Dec, Octo Bin (Bin es binaro.) Inroduzca un niimero uilizando la potacion apwopinda para su base y seleecione la base « la que desea con verir 1 nimem (la base destino 0 bas). “Tambien prede utilizar nctacin cientiiea para expresa los nimeros No. tanvca,dables «de longitud dable, todes son nimeros decimales seguidos de Ie atrae of (dvexponente, nc Hex B),seguido de una potencia decimal de 10 Pot ejemplo, 2OEM = 210° 620,000; -3.334e-2 = -3.33410 7 6 0.0334, ini nie ieee Matrices y punteros ‘Ya he visto anteslas matrices, Las matrices en C y C+ tienen una relacion intere- ante y iil eon les punteros. Enambos lenguajes, un nombre de matrix es un pun- {eroal prime: elemento de la matiz. Esto significa que los punseros proporcionan lun medio alteraivo de weaminar» (hace: un buele, tear, invert) a través de los Clerientos deune matriz, El programa Array, que se muesiraenesta gina, mees: tra eluso dearienética de punteros para recorrer una matt Intéatelo ahora (Cree un programa Array de igual forma que crea el programa Pointer. er eeetg Surtacte cod <¢ 4] 2 4 ce argmeit << enaty {AIMa1T, PLNTEROS Y REFERENCIAS OE C++ $1 out ce tarnae tt ced ce or = Fl programa Array tiene dos zecciones. La primera seccién utiliza notacién ordinaria en ur bucle fr para resrrer los elzmentos de la ratriz. El fragmenn clave de Cr es esta notacién dezcceso de matriz en medio del flujo de sada setne(s) ie cédigo se aplica al operacer de subincice de matris (|}) para recuperar 21 valor almacenaio en el elemento rssimo de lamatriz, Aqui, el valor seha introde- ido en el fluje de salida La seganda secciér del programa Array introduce des sams. Prima, se dcara un pater in, Uamado parry, 5 iiciiza sl Reeuerde que un nombre de mutriz es un pantero, Después dela iivalizacin, _pArray apunta al primer elements de la matsz. Luego, en el flujo de saida, la ‘notacion de acceso de matriz se reemplaza por un fragmento de eédigo de aspecta {Qué sucede? Los das operadues de C++ 2e estén aplicando a pArray. El ope- cador de dereerencia precede al nombre de puntero, asi que pate de> que est ‘mos haciendo es recupenar el valor almacenaco en fa ubisacion actual del primer lemento de pérray. Después del nombre del puntero exe: operadce de incre rnento de sufijs (+) Lo que estos haciendo, entonces, es ineremetar el put ‘ero, Eto se lama normalmente witmétice de punteros. ARadiendo 1 la diree- :ién lmacenada ene puntero, movemos el puntero de modo que apunts al siguien's Semento dela matiz Puede que squi le asslten las das: ,Gué operador se aplca primero? ;Y n> + un int de mis de un 1 byte de avcho? ,Cémo es que s inerementaros en Ise ‘esplaza el pusero al elemento siguiente? Veumos estas cuestiones ta por une. Para la primera cuestion, se apca primerocl operador de derefeencia, Obtie- reel valor que almacena en la tbicaci actual del puntero, para us inmediate 4 contnuaciénel operadr de incremento despaza el puntroal element siguiente, ‘ue le leva ala segunds cuestion Es verdad. un int et mas ancho que un byte pero el compilidor es le suficientmenteinteligente para no incrementar byte + Byte Ensu apr inceenta el ana del gobs ef me aque € ue 92 [APRENDA MICROSCET VISUAL C-+ 6.0 YA tero s+ desplaza cemento a elemento. Como los iass de 32 bits el tipo base agi, som de 4 bytes, ceda incrementa de | desolaza en realidad el puntero 4 bytes. ‘adverencia: NicniC+-+ comprieban el nl dela metri s0 es responsabilidad Enelpograma Ary, se ejects buck forde 1 95 enlugarde0 a Soja e punters ‘foe oe finls tmz, porgue Tos indices de mati empiezn et 0. E]puntry {ermraria apuntao» 9 memoria Tyra de a mat 5 ha uliado +! indice de matrag ‘ipunero pra canbiaro que penis que ere! tino elemento de matnz podriamachs. ‘arly memoria eserada para otrovarable Sto podri provocarun iesastre, 0a menos in erer enganoso. Cadenas y punteros ‘Al igaal que una cadena de C, ina cadena de C++ es una matric de caracteres ‘nombre de una variable de cadena es un puntero, como el romore de otra mattz, ET programa String mucstra el uso de Is aritmética de punters en una variable char Intértelo ahora Creel programa String de igual forma que lo ha ecto con ottos srogramas ce C+ mite cepsect) El progrima String utiliza un puntero para escanear wna cadena e imprimi ceadi sez uncaricer, Recucrde que el nombre de larattiz, airs, simplemente, tin entero a: primer eardeter de la matiz. Para recorrer ia cada, declaramos w> ‘seguedo puntero éste a char*,y lo incilizamos con el nombre de cadens. Util ‘AMaITO,PUNTEROS Y REERENOIAS DL C++ 9B zando el segundo punters para reccrer de el nombre de la cadena todavia apun- fando al primer cardcter. La otra skernative, dsplazar el propio punter de eade- na original, arSir1, deja el nombre de la exdena fuera de la posiién a final det recorndo, de modo que 28 muche mis segura recorter la cadena con an punter suxilae, Inténtelo ahora Vamos a intentar un pequefio expe'imento sor notacin de punteros y sadenas en “Microsoft Visual Cr+, Afiada estas dos lineas a String.cpp justo antes de la sen- rencia de retorm: I puntero «2 apunta al princisio de la cadena, asi que deberiareemplazar 1 Wo en «Windows» por «>. Gaérelo y ejecitelo. El programa ‘alla por uns violacién de aczeso, ,Par qué? Hay un error sparente en Visual C ereferencia un puntoro de cadena de este modo mientras ath ajustads la opeién ‘de complacién /ZI (que es el valor predetermiado, para voportar la caracteristica vedita yejeeuta» del depurador. Para solucicnaro, seleccione Settings del meni >roject. En el cuadro de didlogo Settings, tag clic en la pesta C/C++ y asegi- ese de que la opcién General est ajustads en el cuadro Category. En el cuadio Project Options, edite Ia opci6n 24a /Zi (i mimiscula). Haga clic en OK, vuelva » _gencrary ejeeue otra ver. Asi so acionamas el problema de violacién de accesc, ‘an inconvenienie menor que deberia conocer zolucién Punteros como parémetros de funcién y resultados de funcién ‘cuérdese de ls explicacion anterer sobre los parimetrosformales y actuales. Ea 4 funcion SayHello del programa Hello, el primer pardmeteo formal era de tipo char*, wa pantera, {Qué significa pasar un pustero @ une “uncin? ;¥ qué signif ‘aria devolver un punter> como resultado de funcién? aso por valor La forma predcterminads de pasa: un parimeko a una fuacida se lama paso per valor. Cuando pasa por valor la lncién 10 obtiene el fragmento sctual de les JJatos que proporeiona en a invoeacién de la funcién. En su lugar, se hace ura ‘sopia de los datos, y es sobre la cepa sobre le que taba)a Ta funcidn. La funcién ‘Suede alter la copia tolo lo que cuiera yel Yagmento criginal de los datos pe-- ‘nanecerd intact, Simplemente, recuerde que al pasar por valor pasa wae copia 94 {La forma predeterminada para devolver un esulado de “unsién es devolvero por vaor. Denvevo, se hace ura copia yes la copia la que sae de la funcién y pas. a) munde exerno. Paso por directién Imagine que tieneun fragmento grande de datos sobre ol que desea que tabsje una funcdn, En este eafo, vamos a decit que quiere deliberadameste que la funciin alters los datos qve le pasa, per el ajuste predeterminado 28 asar por valor, lo {que permite que ia Funcion trabaje sélo en una cia. (No sél> eso, sino quest [pasa por valor, a copia de ese gran fragmento de datos padri costarle caro en tiempo y memoriz.) ‘Lasolucien, por supuesto, ex pasar ur puntero alos dates, ailizando un peso ‘por dreccién. De este modo, 9 $e utiliza ninguna copia de datos. La fincion ‘puede utilizar el puntero para alterar los éatosindependientemcate de donde este fon la sotualidad.(Técnicamente, se hace una copia, pero es cel ropio puntro, ash ‘que a copia apura al mismo lugar que e! puntero arginal) Elpaso pcr dieccién también funciona para devalver un esitado de func, sélo que aqui cl motive prinspol cs la efeasi, no hay una gras copia de dator 8 ‘develver. Agu veel aspecto que puede tener el eddigo que dewelve un punter fawso pare crear una tHiog (Owa gran vertaja de pasar y devolver puntercs es que le permiten devolier ‘mas de un resultado, Puede utilizar parimetros de tipo de pumero para devolvet resultados adiciotales. La Figura 3.2 muestra miliplesretemos de forma esa3e- matics et ae tnt eunction iat aParenl, iat paPacan2) Figura3.2. Uso al vler de retomeo de la func y de un pardnetrs de funcén pane devoterresuitados ‘AaarTo, PUNTEROS Y REFERENCIAS DE C++ 95 En una secci6n proxima, le preendrésobrs las cosas poco seguras que pod hacer con fos punteros devueltos, Las advertercias no se splicaran normalmente + ‘of parimetros de punter, s6lo a las valores ce retorno de Fanci, ‘También le ensefare pronto waa estratogis de paso for pardmeto, conocida ‘somo paso por referencia, que no :stdispon be en C. Pasar un puntero const ‘Tenga en cuenta otra cosa sobre ls punteres. Imagine que su raz6n principal para pasar por direcrién en lugar de pasar por valor es evitar la sobrecarga de copia, ro desea que se modifiquen los propios detos en la funcién. En ese caso, pued= dleclarar el parimetro con un modi icador cont, como éste: Utlizando const de este modo hace que el :ompiladorrefuerce sus deseos. Li Thing spuntada por pThing no se puede motifcar en a funcién, Pasa: parémetres ‘const es un buen ejercicio practice cuando realmente no tiene intenci de que la Funeién modifique los datos. ‘A qué pueden apuntar Jos punteros “Ademis de apuntar a variables ordinaras y « matrices y cadenas, los punteros ‘pueden apuntara muchas otras cotis. La Teble 3.1 resume lo dems «lo que puc- de apuntar un puntero, Tabla 3.1. Alginos desis de pun'eros Destino del puntero Comeatarios ut ‘Un pte puede puna a ada Mi cnsejo es aus eualger punter qu no aunt aun ojo partes a Null {un prtero mule emo un puree a8) Sten dereerncar sin queer un pane senejant, s pccion evar a cabo unt vii de ace vad aj, peo ‘0 e¢probiblement, mejor que bce ue pum 2 quien he ae sanet Ua smc, qu ein con mis tlle en el ipa e+ ‘ma cokecin de varables con nombre, como por empl tx (comme APRENDA MICROSOT VISUAL C+4 6.0.¥A ‘Tablas, Alunes destinos de punteros(continvacién) Destine del punters Comentarios Podenos declan una varie de ip sac y waa como conor con au vrals,fcuyenso duo de pune Rystricts patswet © enseruct Oye de clase Us case, que tumbidn se expica ene! Caples na src om mye potenti, come por ep: 4 wyChaee oe nae Funcanes Un punter defancim east end necesita pus ut Fann como ia parietm AT hacer est permite qu funn nso oa funn aba 8 eye ecm = pas 94. (Torn avanzada) Funcia miombr de case Puede obtener dei de una fi iembro de ls (stuncones nib se expan es Capitulo 4) tla pca com le ala con sn anteo una nso kl (Tema wanzado) vou ‘Am poner a void se lepaede asia alr de cult ‘pane gue 0 se declare coma cons Pr cempl, 9 una arable de ip roids &pucdeaognael valor de ua Sarl de tip chr®o it Un pera vides it euanio {apo de obj nose concee pure vara, No puede tlerferencit ete tip de pnt st cores prime & tht tp de pier (Teme avanzade) Las jerargulas Je hor de cla un mejores mecnimos qu los punts toi eosaee! Capa). pte ‘Como pu defi un pct cui variable ambien ke deine an panera sun punter Eos Iams unt Fndrecei dbl, y Hine ss wos. Teme avanzado, pro ene I sigaet expla de ura ate de puns) ‘Como cuslquer otro tipo de variable, los punteos se puedes almacenar en un Imatriz. ;Qué tiene de bueno uns matriz de puntercs? Consideremos una matriz de ‘ademas enact arsea(] © ( ‘aipna. * soammat, ‘dees ‘AMBITO, PLNTEROS V REFERENCIAS DF C44 $7 (Como un char* es ur puntero, sna matrz de cadenas es et realided una matriz de punteros. Puede ver esto en la Fgura 3.3. E-nombre dela matriz en este caso también un ejemplo de un punter» a un pumero. El nombre de la matriz es un puntero al primer elemento de Is matri, que en este caso es otro puntero. Ex= tonees, el nombre dela matriz, es an punter> aun punteroa char. (ilnéatelo! Cree an rogram gut gue ncorre lei Gue se muesra en pga a- Nota: C++ noe permits crear ura matrz de ferences. Le exolicré los referencls nds adelante eneste capt ‘Una matriz de punteros puede ter til para todo tipo de areas. Poe sjemplo, si secesta ordenar una matriz de objetos de datos grandes, una buena estrategia «= ntilizar una segunda mati que centiene punteros a los sbjetos. A continuacion, ‘en lugar de desslazar los propios cbetos confveme trabaja en su algeria de o- sdenacién, puede desplazar los pusteros de temafio més pequefo, una ganancia considerable et eficacia Por cieto, el almacenamiento reservado en el montén ara una matrzse tiene cue desaloarcortertamente, (Es ms comin wkicar matri- «es en Ia pila, pero algunas veces debe colacarias en el montin.) Puede ubicar el almacenamiento de la matriz en e'montén ui izando new, como sigue lng tartnte = new int): tes ars esc ar Figura3.3._Unamatriz de cadenase: una mati $e punteros REFERENCIAS ABRENOA MICROSCFT VISUAL C-+ 60 ¥A Eso reserva espacio para cunt varisbles int, que pueden a continuac én ae. ‘ceder con la nota:ion de matiz, como se muestra en el c6cigo-aisiado siguiente srtees(01 = 0: cout ce arrntal0} << anal Como la natrz anterior se reservs con new, sedebe desilojr con delet. Pare no es suficiete hacer esto: Recuerde que un nombre de matt es un punteo a su primer elemento. Ash la sentercia delete anterior desaloja s6lo la primera sentencia de ints. Lo que real- ‘mente necesiames es desalojar la matria entera, La notaciin siguiente hace 30 ‘corrctamente, nego ajusta el puntero a Nu, lo gus signiiea que no esti actal- detece () aetnte amos explicado brevemente la ubicscién y deslojamientade las matices en cl montén, incluyendo las matrices de punters, ex el Capiula2. Le recomiendo ‘vivarente que vielva ahora a esa expiczcién pars que le ayud> a perfecciona: lo uch visto aqui Nota: _Elinvecar Set para un puntreajutodo a Nal es noes. Per inva de tepar un purterccayo valor no ts defi Nala dreaior de un objeto et Ind couse probenssintentar borarum purtero no deinigo es muy pareise 9 erat ‘erduencor sn. Semjantes spnters perddor son cls de depurar pore I Sintonassepoedeselmnar de oma mds fic apart dea acon 3a ls C403), cme imexehe que choc con un bol auna millade donde se pinch ed 1 (C++ ntroduce us nuevo tipo de variable una variable de refersneia. El programs | ‘Refer! proparciona un ejemplo seneill, UB ces Cree el programm Refer! de igual forma que lo ka heche con otros programs dec: ‘Amaro, PINTEROS Y REFERENCIAS DEC++ 99 cous ce amynee ce 11 canbla mytat a travis de siytee. Una referencia es un alias par otra vasiate, otro nombre para el mismo obje- to. La referencia no es tn objeto cistinto por si mismo, come un puntero. Es $60 lun nombre. Enel ejemplo anterior. rMfyRe)se dice que hice referencia. a mylnt,e¢ tun afias de myint. Cualquer cose que pueda kacerdirectamente @ myn, también pdr hacerla por medic de Ia rekeencia rMyRef. ‘Aunque aparece y actia un poco como un puntero, una referencia se debe ini= cializar para que haga referencia a una variable particular, y despais se puede asignara una variable diferente als que hace seferencia, Recuerder une referencia debe hacer referencia aun objta xistente, wao que exista durante ted la Vida de la referencia. Las variables de purteros son mrés como, buene, variable Puede utilizar referescias comase muestra en el programa Refer|, peo el mejat ‘uso es como pardmetros de funcitn y resultados. Puede realmente aprovechar si cficacia siempre que se atenga a 38 pocasreglas que hertotexplicade Nota: Como las referencias san sco nombres, ro objeto reales es una idea expec ‘mente buena dais nombiesdstintnos. En Refer, he prea el nombre NyRet con {de referencia: NyRel, Un rombre mex rigurosamestehungaro, ahadlendo po de datos fel ebjera al que se hace referencia, sera algo como Hinttye 100 [APRENDA MICROSCET VISUAL C-#+ 60 VA Paso por referencia Hemos explicado cos mecanismos de paso por pariretro ‘= Faso por va‘or, donde se pssa una copia y el original no sepuede modiiear através Je la copia ‘= Faso por direcet6n, donde un puntero se pasty el original se puede modi- fear a través de ese puntero (ano ser que el parimetrese3 cons) El tercero y dim mecaniszo de paso por parimetro en C-+ se llama pavo ‘por refrencia El patimetro formal espec fica tipo ce referencia, BigObject& en teste ejemplo: yy el asimetro rea que pasa, une variable de no referencia (an ebjeto real, no wn puntero a uno), inklaliza el pardmetro de eferencia: sigonsece myto!_ 17 myo existe senteate copo in ebjeto n'a |MyFunction puede modificar myBo, elobjeto original, a taves de la referencia fal mismo (a no ser que precedanos la declaracién de parimeto con ls palabra lave const). El programa sigucnte, Refer2, muestra cémo se puede cambiar el bbjeto al que hace referencia el parimetro de referencia, eae , Cree el progrima Refer2 de igual forma que lo he hecho cor otros programas ; de Ct serve: migonsect Gouble arm01 (200017 // me Vole eyrunctior(sigonsects bo) ‘Amaro, PUYTERDBGSETERENEDAS HDA C401 int matntine arge, chart are7(0) old myrunction(aigansects $9) El programa Refer? declara is tipo struct llamada BigOhject. BigDbject cam tiene dos variables miombro: ur int y una nateiz grande de doubie:. Em mai Refer2 crea un Big00ye=" Hamad 40 en Is pila €Inilaliza su veruble meer bro int, Var1. (En realidad, tambitn iniializemos la variable miembro de la mi~ teiz, pero slo teniendo el espacioreservado pata 2.000 dobles es todo lo que ‘esitamos pars indicar que MB es grande) Lucgo main invoca MyFunction, pasindole la referencia BigObjecr Tenga 2n cuenta que en ls invacacin de fun- ion, simplemente, pasamos el nonbre de obit, sin & ri otas deccraciones, pa- ‘samos un objeto real de modo siguiente: MyFunction se extiende a lo largo del yartmetro de referencia par alterar una 4c las variables miembro de myBo Las tres sentencias de saida siguen el valor de variable antes, durante y después de Ia invocacién de funciin y mecsiran e6rro funciona la referencia {Qué ventaja hemos obtenido Sela referencia? Come hemos pasado por refe- rencia en lugar de por valor, hemos eliminado la necesidad de eopiar BigObject conforme pasaba. Con objetos pegieios como ints 0 chars, o cualquier cosa infe- rior o igual a 32 bits, pasar por velor puede sex un medio mejor de funciona, #0 ser que necesite modificar el objet original desde la funcin, Pero cen los abjetos de datos grandes, pasar por refer=icia (0 por puntero) pucde ser mucho mas ef- ‘az. Explicaré esto con mucha mis profunlidad, con los pros y los cotras de las referencias en a siguiente secciéa ‘La otra cara de pasa: por referencia irpliza volver a un esultado de funcién por medio de una referencia Esto funciona de forma muy parecida 8 devalver un resultado por medio de un punters Sin embaago, ambos métodos de devolver les resultados requieren precaucién, exmo lo exp icaré en la seccién siguiente, 102 APHENDA MICROSO'T VISUAL C#+ 6A {2MBITO, PUNTEROS ¥ REFERENCIAS DE C++ 103 -MyFurction no puede altrar un BigBject pasado al mismo por medio 4el parimetro const ho. Del nismo mod, MyFunciion devuelve un objeto PRINCIPIOS GENERALES Y PRECAUCIONES DE PUNTEROS Y REFERENCIAS ‘Hemos 2xplicado las tes métodos de pasar pardmetros y devolve resultados de tuna funcion en C+ paso por valr, paso por direccién (puntero)y paso por refe- fencia “Cuil debetia utilizar en una sitwacién deteminads? Aqui tiene algunos principios generale, Directrices para el paso de parémetros y devolucién ae resultados 1m Para fos objets de datos pequetios (inferioreso iguales a £2 bits), pase per sar. 1m Para los objets de datos grandes, fase por dteccién o por referenea. Si smcesita acceder a Jos elementos individuales de una gran extensién de me- ‘mora, por cemplo, un pursero funcona bien para recotre"Ios datos. Pero, Ebido a toca la dereferencia que necesita ur puntero pera acceder 3 1s tdementos por medio de una notacién de matriz, podria ser mas eficaz pastt tna referencia una matri y uilizat Ia nocién de natives. Por ciem>, ‘Reuerde que las matrices siempre se pasan por deccitn, no ser que espe- ‘Gfigue pasa: por referencia, Esto es ai porque un noribre de matriz es un untero. '= Si necesta modificar un objeto de datos original de cualgsier tamaho, pase ror dieeci o por referencia, La copia que obtiene si para por valor evita emejantes modificaciones, 1 Los principiss generales que se han dado anteriormente se aplican también «Tos resultalos de funciones, pero hay mis precauciores especiales a tener én cuenta que complican el asunto, Los trataré en breve 1m 5i debe devolver un valor que se crea como sna variable local en uns fan- ‘dn, desuéhalo siempre por valor, independientemens del tamafo. Lee Plicaré por qué en un mortento. 1m Una referensia debe hacer referencia « un cbjeto existerte. EY mod> mis Geil de garantizar que un objeto existe es que pase el otjeto original, pot ferencia. $i el objeto existe fuera de la furcion, resalta seguro crear unt ‘eferencia a mismo desde dentro dela func. 1 3i no necesia alterar un objeto grande que se pasa a una fincin o que seh Jewuelte deuna, declare us parimetro const eferencis 0 nuntero) on tip? {eretomo cons. Esta fanein prottipo muesra ambos: const inalterable por medio cel mecanismo de retomo. Uiilice conse generosamente. Esta destinado a los programas fiabes. Puede {eclarar un puntero no const a datss no const, un puntero const a datos no cons tn puntero no cons a datos const, © un puniere const a datos const: Consejo: Cémo decile qué es cada cosa Sila oalabra lave const precede nombre de {bo de dte,osaatos son const Si ost precnde a nombre de punter e/purtere erst tas variacomes le permiten contrlar de forma preciea a que pede y ne rucde cambiar: es la parte no const sies que hay una, que puede cambiar el pro- Bio puntero, los datos alas que apusta, 0 ambos. Puede o deberia utilizar const det mismo modo para las referencias. V puede ulliar estas varaciones en pardmetros de funcién y tipos de reterno de facién Devolucién de resultados: Debe tener cuidado Ya le prometi que explicaria los riesgos de algunos modos de devolver un resulta- ‘do de funcibn, Veremos cémo devclver objeto: locales de una funcién, ebmo de- volver un punter 0 referancia a ur objeto que existe fuera de la funcién y cma asegurarse de que el puntero devueto se elimina correctamente después de ut lezarlo. Devolver un objeto local ‘Tenga cuidado ¢e emo devuelve ax objeto Local. Un objeto leal es na variable local (de cualquier tipo) en una furciGn, Siempre devuelve ur objeto de ese tipa por valor, independientemente de si tamafo, as variables locales se destruyen ‘cuando salen de! dmbito sl final del funcidn, Consecuentemente si devuelve un ppntero o referencia a un objeto loa, el punteo o referencia tiene un valor inde- Frnido después de que Ia funcién rtome. Sia continuacién wtliza el puntero @ referencia para zambiar fo que pets6 que era el objeto devuelto, esribe en su Ingar sobre la memoria en otra partzdel prograria u obtiene uns violac‘n de acce- 59. Al gual ue con esaitse fuera dl final» de una matrz, ese error podria hacer 104 APRESOA MICROSOFT VISUAL C++ 6.0 VA {ue suprograna s venge absjo y proporsionarle horas de prictica de depumnc [La fumcinsiguieate usta el problema pugobjece to; // Variable Jocel, ereada en La pila 1 TSE ae ambite cuando nyfunct ion retorne = ‘Acui resulta equivoca uilizsr una referencia como tipo de retorno, Devolver tun puntero a b0 srt igualmente probable que provocase un flo del program, ‘Lafuncin siguiente devuelve un objet local corectamerte, 20 valor, de medo aque lange se deveelve es una copia del objeto, La copia sigue existiendo,ircluso, {cuand> el origina se sale del dbo. Bigcbiect HeFurceiont) Felurn to; | //evoiver una copia Devolver un 3igObject por valor requiere una copia costosa, por lo que ayul tiene na forma atemativa de obtener BigObject desde MyFuncion sin una copia bigersecr mise Function (ayvor ‘old myPunctson (Bigobsecte bo) este e180, crear BigObject fuera de MyFunction, pisel por referencia, ¥ permita que la fencin opere en el original medizrtc Ia referencia de parimet. Flay menos sobrecarga y ningin peligro de intenier devolver un objeto Incal moda equivocade. Referencias y objetos existentes Las referencias ceben hacer referencia aun objeto existent. Esto es una necesi= dad absoluta, pone una referencia es silo un alias, otro nombre para ese objet El modo mis sinple de asegurar que ura referencia hace referencia a ur objet? texistente es que asted mismo cree ese objeto y uilice el parimetro de referencia para vasarloa finciones, El timo ejemplo de la secci6n anterior muestra com? hace esto ‘20, PaNTEROS Y REFERENCIAS DE C++ 108. {Qué tipo de objeto puede devolver una referencia con la palabra clave return? Dete ser un objto que ered usted mismo, o que ered alguien fuera de lt funcién Puede devolver ranquilamente unareferencia 2 un objeto que es global ala Fun- cién, oa un objeto que, por ejemp, creé Windows. Enel primer cas, por lo que ‘= refiere a un cbjeto global, es nommalmente nejor intoducit y extrac, simple- ‘mente, el objeto por medio de un rarametro de referencia que utiliza el retorno En el segundo caso, si Windows a MFC es responsable tanto de crear como de estrur el objets, una referencia al mismo est bien, siempre que el ebjeto cont- nie existiendo durante el tiempo d: vida dela variable a la que hace reerenci For ejemplo, Windows reserva almcenamientc para un objeto de contexto de dis: ositivo (aprendera sobre éstos en a Capitulo @ y obtiene un manejadat al objeto. EI manejador es realmente un punt-ro directo, pero el objeto es un préstamo que s le ha hecho. Windows lo ereé y Windows lo destruira. Es libre de uilizarie centre tanto, siempre que lo devuelin a Windows cuando termine {Que pase sicreael objeto dentro de Ia fancién con el opersdor nuevo de C44 Puede devolver una referencia a ee objeto? Bien, el objeto se crea ens! montér ‘lugar de en le pl, asi que contnia exisiendo después de cue la funcin vuel- va. Por lo tant, la respuesta es si, puede devolver una referencia a este objeto. El programa Refer iustra cémo se hice esto, Inténtelo ahora Cree el programa Refer3 de igual forma que fo ha hecho con otros programas de Co seruct obs ‘ obsecte myrenction(s sot mein tint eege, cher aravil) objects cayons = nyrancticn Sout. ce Semyobsva se myOb$. a Glace arnyons; "// sorsar abjeto seterenctade 106 oe wyrinction() 4 ow objects // crane 11 Saee sbsato on 42 montén 11 mevolwar #2 propio obiete Le téeniea de programa Refer3 funciona, la variable de refsencia rMjQb) en ‘main se inicalizs al valor devielto por ifyFuncti, Pero :odavia queda un peo. ‘lems. Alguien, an algin momento, debe borrar et blogue de memoria que hay en celmontén. gcéms? Hemos perdilo el puntro a la memoria cuanco retoro MyFne- fiom La variable era una varitble local que $e seli8 del imbito.) Pero odavia teneros una referencia al objeto, rMyO2), y podemos tomar bt direceiin de esa referencia, ela misma que la cireccidn de Ia memoria en el montin, despues de todo, ¢ invocar d-leteen el purtero resultnte delete ennyes Evo se encarga del atunto, «! bloque de memor-a ha desaperecido, aunque to- davuhey un preblema de some pademoe contar ran quien quiera que lame a ‘MjPinciion para llevar a cabo un poco de limpieza. Pronto le contaré més scbre ‘esto en ucQuicn aorra el punteo?» Punteros y objetos existentes Un pantero deberia apuntar a Vull oa un objeto existent legitimo. Si xo tase ninguna de las dis cotas, en oF palabras, si el puntero esténdefinido, inteatar Gerefsrencianlo generar resultados imprevisibles y crearl ur error escurrdi. DDere-erencie en su lugar un puntero a rull y oblendré uns violacin de acco, pero seré algomis ficil dcterminar dénde ha ocurido el problema, Por est porle que siempre le recomiendo ajustar un puntero a Nulftan pronto coro bor ‘aquello a To que apunta ‘of respecto ¢devolver un puntero desde una funcin que ut lib mew para tet cl dheto al cue spuntaba? La historia es muy parecda a lade as referencias pat sos Dbjetos. Puede hacerlo, peo existe un riesgo Forque tiene que confiar en gue flguizn, en un momento dado, borre el puntero. Si no se berra,habri un hueco et la memoria, ZQuién borra 8! puntero? ‘Queca una dda tanto para lo punteros como pari las referencias: cuando su fun cid devuelse ux puntero o referencia aun objeto creado en el montén con se {avin es resporsable de invocar delete para ese pantero? ‘La funeisn cue ha creado al puntero o referencia no puete ser response ceuanio se devusve el punteroo referencia, la funcién ha termanado de ejutrst ‘2uBrT0, PINTEROS YREFERENGAS DE C++ 107 [Asi que es responsabilidad de quien invoca irvocar delete. Lo que resulta poco Frictco aqui esque esa funcién inoc6 ev, pero usted (uotre persona tiene que ‘acordarse de invoear delete. Algurss veces :I ivocador seri un programa de otr= [Fersona,y otts veces puede ser sto, quizé se s meses o un aio a panirde ahora "Todos somos humancs, Solemss pasar por alto pequetios cabos suttos como estos, un puntero o referencia nc horrada 2s casi seguro que provoque un hueco Ce memoria mas tarde o mas temprana. Pores 0 es por Io que se considera gene- ralmente pobre la prictica de progamacion de devolver un puntero que el invo- cador debe bortar Iuego. Puede inficar en la documentacin que es tabajo de invocador invocar delete para el pantero o la referencia, pero ,quién lee Ia docu- rmentacin? (Pregunteme, soy yo quien esctibe) Algunas veces correri el riesgo pero es mucho lo que esa en juego. Normalnente es mejor devolver un objeto ctual por valor o trabajar con un cbjeto que ya exista que pasa a su fancién por cireccién 0 por referencia. Considtese advert do. ARCHIVOS DE CABECERA E IMPLEMENTACION asta ahora, la mayor parte del tierpo, heros puesto todo logue esta en los pro- _gramas de ejemplo (lantodeclaracimes como definiciones) en un solo archivo -epP, tn archivo de implemeniacion de "> Pero el modo mis normal de programa fen C+ es poner las declaraciones en un archivo de cabecera (con la exensin h) ¥ las definiciones en un archivo app. A continuacién el arctivo .epp incluye el Erchivo ‘como éste: Los archivos de cabecera ¢ implementacién de C++ son, simpfemente, com> bos de C, Vames a crear Referé, sna version Jel programa Refer3 que divide et ‘cédigo en un archivo de cabecera y un archive de implementzcibn. El archivo de ienplementacin (cpp) debe incluilacabecsra Cree estosarchivos cone! asisten te del modo usual, nombrando el poyecto Refers Inténtelo ahora Cree dos programas: Refer.cpp y Referd.t 1. Croc e programa Referdpo de igul forma que lo ha hecho con otros pre- gramas de C1+, Edite Refe.cpp para que aparezcan como sigue: SSI Setters APREXDA MICROSOFT VISUAL++ 6 0.¥A tnt meinsint argc, char* argvtli c obsacte tyobs = wyranction() Gentes stuyobi est ce sMyObi-4 << ena SSlees srmyonds 1/7 porsar obSero roferemciade > obsectt ayranction() chjects —// crv un objeto on ai mentén 11 Sjuten ee valor 11 versaive at propio objeto | CCree un amhivo de cabecera Referth, aadn el siguiente cédigo y ahaalo al proyecty, Para crear el archivo de cabecera utilice el comando New del ‘mend File En el cuadre de didlego New, haga cli: es la pests Fils. aga clic en CIC++ Header File y pongale a archivo el nambre de Refers ‘enel cuad’o File Name, Confirme que selecciona la opciin Add To Project ¥¥ que el sombre de proyecto es Refer4. Haga clic en OK para creat el “rehivo de cabecera como parte del proyeciy Refer, struct onsect a Objects myrunctss «For qué diviir las cosas de este modo? Imagine que desarrollo un tipo d¢ datas itil, como struct Object en Refers. Puede ue quiea silizar ese mismo tipo una y otra vez en otros programas. Sila declaracion detipos est inerustda ten archivo ps para el programa A, tengo que hacer una cori y pegar la epi tenet archivo cpf-del programa B para ulizarel tio ahi. Pero s las declaraciones de tipo, las decleraciones de funcion, ecnstants y otros elementos reutilizables estén en uno 9 mas archivos de cabecera, cualquier srograma prede volver a ui 2zatlo simplemert incluyendo los archivos de cabezers. Ademas, muchos Fog ‘mas de C++ son osuficientemente grandes como para diviir i e6digo er mili ples archivos opp. Algunos archivos cpp puede que necesten inclir las mismas ‘declraciones; as que, de nuevo, separa esos elementos en archivos de cabecer@ puede sera Note: La catecer na tiene porque lamarse Refers. Object puede que se un nan ‘re nis signifetio porque cntiene una decarecién del tipo OMe 40:70, PINTEROS Y REFERENCIAS DECH++ 108 Siga esta rela: Ponge el cddigs ejecutabe,definiciones de cuerpo de funcior cualquier otra cosa que reserve alnzcenanietto, en los archivos cpp. Ponga las Seclaraciones en los archivos -h. Este paso seecillo evita erores del enlazador {ebidos a las defniciones maltipes del mismo objeto. Estes eres del enlazador fFodrian aparecer si algunos arch vos de imp-ementaciOn in:luyesen el misme archivo de eabecera, Evitar la inclusién maltiple 'A veces surge un problems en el use de los rchivos de eatecera. Puede inclu sin ccuerer el mismo archivo de cabecera mis de ena vez en el mismo archivo .¢pp Esto ocurre cuando el archivo de czbecera B ircluye el archivo de cabevera A (i, ‘una cabecera prede incluir otras cabeceras), el archivo de implementacién C {ncluye tanto A como C. C obtiene Jos copins de A, y obticne an mensaje de error ‘que da verdadero pinico, Para evil esto, no incluya A ea C; incluya solo B. Ls Figura 3.4 ilusta el problema y la solucién. Tazar un diagrara como éste pued: ser una gran ayada para mantener sus cabeceres en buen estaco, ‘También puede codifisar de marera formal para evitar Ia inclsién rtiple,uti- lizando directivas condicionales dz preprocesalo. Para ostener mas informaciéa ‘yun ejemplo MEC, consultewLectra de losarchivos AppW izard» en el Apendice, Cabeceras precompiladas Le oftezco un titimo comentario sbre el uso ce cabeceras. Er Visual C++, puede precompilarcuslquier cédigo que sea bastante estabe, es decir, cualquier c6digo fen el que no redlice cambios frecventes. Si precompila, puede reducir la cantidad (Cp yoiciyere ANE Figura 3.4. Incr archives de caberra correcta» incorrectarente 10 de citigo que ive que volver s compiler cada ver que hace us cambio y gene €l programa, Les archivos de cabecea 08 un tipo de cige que puede recompila de oe sma ta, Expecialente, cuando via un biblioteca de cbdigo grande como MFC, Jas abecoras de precompilacion puede reduce mucho el enpade generac, un home que conduce aun procescmiento mss pie y mers su productivicad En los proyectos de MFC, las cabeceras eatin precompiladas por cefecto. Pars vite, net mis informacion sobre edm> ocure esto, busque en la Ayxda acerca de pre. omptedheadersy cial subtema creating. En ks programas de MFC. © at vo SWAfuih ese: corazn del mecanisie de cabecer prefeterminada, nau, «en es aplicaciones de consola smple que creamos en el ib, SAT 0 juga un gen papel Para configura una aplicecin de consola gue vice MFC y, yor tanto tlie el mecanismo de esocera precompilace generoxmets, resis ap caciores de concla de forma nm, peo no selecione «A Simple Applicains en AppWizarl. En st lugar, seeccione Ia cuaria apeion, «An Application Tat Suppers MFC», si ha segudo estos pasos en el Capitulo | para crear un ne- ‘a Win32 Consok Application, habrd visto las ewito opeones alas que te e- Tero. Inténtelo usted mismo Examinese con efsiguient trabajo extra 1. Practiquetos punteros Bscriba un programa pequefio que haga lo siguiente: ‘= Crear una matriz de 25 elementos char (ao char‘) tm Inicilisar la matric con 26 letras del alfabeto ing és | Recorrer la matiz hacia atrés con un puntero (no el propio nombre de a ‘matriz sno un puntere distinto),extrayendo las lerasen orden alfabti Consulte © programa Chex! que s:encuents en la carpe \AprendaVCYa\ ‘CapO3 del cédigo que acomparia para ver una soluciin, 2. Mis pricticas con punteros Escriba otis programas pequetios en los que intente ests ejercicios: f= Crear una estructura de datos de pla util zando uma watriz de 20 pute ros 1 char (no punto achar*), Necesilard un seguro punter char pata representa Ia pare supercede Ia pl, el «punter de pilan. A m2 fide que afada los elementos al pila (sh), hagalo sempre en i pare Superior, a continuacion avance et punter (enierdo cuidado cos el tal deh matiz).A medida que extae los elemeaton de a pila (PoP) r ‘Aono, PUNTEROS ¥ REFERENCIAS OE CH 111 mueva siempre el purtero de niewo hacia el principio de ls matrz,lue- {go ponga ah el elemesto. Cuidad> con el elemento 0. ‘= Introduces It cadena ypurtsuors» en Ia pila w= Extraiga todo el conknido de la ila, imprimiendo los elementos que tenga. Debera terminct con la palabra epurtsuorto» deletreada al rexés, _troustrop, ‘Consultee programa Chiex2 que se encuentra ena carpeta\AprendaVCYs\ CapO’ del ebdigo que acempata pan ver una solucién. 2QUE VIENE A CONTINUACION? En el Capitulo 4, exporaremos a caractistica central de C++, la clase de C+. Las clases son esenciales para lacreacin de sus propis tros de dios compos 1 pata la programaciéa orientacs a objetos. Estos son les temas que sbarcaremos: 1m Clases y objetos, ‘= Variables miemoro de elie y funciones. 18 Contral de acceto extomas los datosde la clase Capitulo Clases de C+ + Este capitulo y el sigueente rematan nuestra explicacin del lenguaje de C++ zon tna serfe de programas que iat el uoy de las clases de C1 |. Lap clases 20% ol modo principal en C- de etear tuevos tipos de datos defiidos por el programa- ‘dor. También son la base para la programac én orientaa a objetos(aormalmente tsonocida come POO). Abordart el tema de POO, a rates, en este capitulo yer el Capitulo 5 mastrindol los siguentes proge mas: 1= EI programa Shapet introduce tres ruevos tipos de datos dseiados para uilizarlos en soware que dibuja y manipula las formas geomtieas ccmo rectingulosy elses. En Shapel, el C++ es muy parecido aC, no es un mel ‘unto de partida para empezar si no conoce las cases y la POD. ‘© EI programa Shape? es bastante seria respecto los objetas. Este c6cigo pregunla,«;Porqué no deveria un abo see responsible de su propio com portamento?» Responde introducienco ls clase. Skape? utiliza las clases ‘como base para versiones nuevas de ls tes tips de datos en Shapel. Las Clases sontienen funciones asi como datos, haciendo las corsirucciones de programacién muy potenss y versie. '= El programa Shape3 del Cepitulo Sse scerea,finalmente, ala meta de utilizar ‘completamente 3 carackristicas Je 200. Introducizndo la posibilidad de (Ci de derivar una elase nueva a pactir de una existent, legamos a sas caractristicas que la mayaria definen come POO: encapsulcc’in, herencia ¥ polimorfismo. En el Caitulo 5, ver2mos primero la encapsulacin, la ca pacidad de un onjeto de case de contonere incluso ceultar datos. Verermos ‘como puede dervar una chse a panir de otra y cémo la clase derivada here- da las saractrisicas de I clase base Veremos cémo son las jerarquiae de clese resultants. Veremos cémo omit las carscteristicas de una clase base cc una clise derivada de la base, Y sbordaremes cl polimerfisme, que se tealuce mis omenos por «muchas formas», de forma muy Bteral '© Algunos etros programas pequefos en este capizulo y en el siguiente mos} tran otros aspectos de C+ inclayendo expesficadares & acceso, cons trxetoresy destructores y miembros de clase estitica. Enel Capitulo 5, tm tien explizar€el mbito de clase y abarcaré la sobrecarga de operadores Enticlos temas 6 C+ adicionales de este capitule se encuentra los siguietes: 1 Scbrecarga de funciones. ‘= Funciones miembro de clase, m Elpunterod ‘= Ocultamiento de informaci6n y conttot de acceso extemo a miembros dl dss. ‘= Ccnvencionesde cédigo fuente de Microsoft Foundation Cass Library 6. (Fo. 1m Veriables estas, ‘= Funciones y clases amigas, CLASES Y OBJETOS Fn el mando de la programacién, hay (al menos) des definicones de 1a palabra ‘object. La definicion mas bisica es «una region de almacenamierto que tiene uo tipo de ditos especticoy. Las strings, ints y doubles, se considera, por ejemplo| ‘objetos. Sin embargo, Ia definicién de C++ y de Ta POO de un objeto es curd regidn de almacensniiento mis un conjunto de operaciones que pueden manipula ‘ese alma:enamiento>. neste caso, un objeto también puede hacer referenci 3 ut ‘objeto de clase Entoaces {geé es una clase y cul es surelacién con un objets? Un modo df verlo et decir qe ura clase es como un euchillo de galletas y los objetas son come] galletas. En esercia,una clase es un tipo de datos, como into loat, pero defini] por el asogramador en lugar de selo interno. Otro modo de decilo es que un clase es un plar, ccmo un proyecto, que utiliza para crear objebs reales en st programs. Una clase define Ia estructura y comportamientos de sas objetos efi niendo les mierbro: de datos y las funciones miembro. Dent dela declaracion 4e clas, los miembms de datos (también llamados variables miembro) se parecet ‘muchos las declaraciones de variate ordinarias, mientras que is Finciones miem bro se perecen mucto los prototipos de furcion cusesoecrs 195: ‘Aqui tiene una clase de C++ nuy simple, en forma de una siract del esto tec: ota Sethene ateing ane) Sota Seeeentetriag sou) String Getwane) wold ConguvemonenlyPay0) Si sabe algo de C, esto le puede parecer una estructura muy extra. Si es un programador de Pascal, mbién parece exirato, como un registro d= Pascal con ‘oclaraciones de funcién inseradhs, Pero en C*, eato cs une eatruciura legit ¥ una clase. En realidad, hay tes ipos de clases en C++ 1 Clases declaradas con la palibra clave sruct. 1 Clases declaradas con la palibra clave enion. 1 Clases declaradas con la palibra clave class Explicaré ls vatiaciones de siuct y cls mas adelante en este capitulo. Lis saniones son algo avanzatas (y,sinerament, algo arcaicas), asi que ne las expl- ‘saré mas aqui. Examine el indice d: la Ayufa acerea de union y lea losdos prime- 0s temas enumerados en el cuadic de dialoge Temas enconttados Uailizando la clase Employee, puede escribir un cédigo emo el siguiente: amployee enpourrents jpcurrent.SetNane(“C4ncher, Tuan manuel"): Shocurrent mstesocielsecuris/sunber = "555-55-5555 La primera linea declara una vriable de ti Employee, Imada enpCurren, ‘empCurente5 un objete de clase. Contiene lus miembros (miembros de datos Sunciones miembro) enurserados eta declaracin de struct. Lasegunda linea mues- ‘ra c6mo invocar una fureién mieniro del ob eto. La tercera linea muestra el ac- ‘ees0 aun miembro de das de fora directa. ¥ la linea final muestra oa inves «i6n de funcién miembro 6 [APRERDA MICROSOFT VISUAL C+ 6.0 YA “Terga en cuena cémo hemes declaraio la variable empCwrrent, su tipo datos ya contiquacién el nombre dela variable: . Creacién de una clase desde cero Una cise noralinente rpresena una absaccn. como per eemplo un pun, tna ana goumévicaun davunentoo un empleo. MEC, por ejemplo, ene ‘Hiker para represmta documentos, cos de diigo e, eis, apiacions came node sail ero prog pe a au epee Siar wetingulosyelipses, Los rectngls eps iencn carcteristias com exe bai, tocol te. De fm sac oa a Thumbs, An qu deserolremos ua clase forma que ued representa TToesdnguo, un elise o cualquier otra forma qe especitquemos. Configuar I cles de Torna fnpleacoumer cons gue pode hacer ccna forma Cea, St splrars colar, ampli, desta Teng em cuenacin mis a traurue forma como ura cosa objet, que poems manna rt andida que taneamos hai la mpementein, nos dedicaremos ds ti tutor eg tela forma bidimensionat un recanguto eveuadam, dentro del ‘aya la ferme completa yur I de alg ipo fara ient iar po deforma Grecdaguo, lips ee). (Un dscho mi comple puede nc uir un cole, wa tei yoo aribtos) La Figua 1 mest el ectnguo cieandnt de ts ep ‘Acuiien uns clase see deforms -- == (50,70) Figure 41. Pectangulo circundarte de una forma, custs orcs 117 Lo que queremos es un prograaa de ditujc, pero come estamos tabsjando e= tun entorno de modo de caricter, por el momento, simplemente, visulizaremes tuna cadena para cada forma que dibujems si podemos. La cadena contendra l tipo de forms y las ecordenades de su rectingulo circandante. Las coordena das € del éngulo superior i2quistdo vendin primero, seguidas de lis corde nadas.xe y del ingulo superior derecho. Ejemplos de tales cadznas son ectingul «en (0,0, 20, 20 yelipse en (30, 38, 127, 140) Mis adelante, reemplazaremos fa implene tacién anterior de la cpsracn de trazado por laivocaciona una funcion Microsofe Win32 API que realmente tract ‘un rectingulo o elipse dentro del rctangulo excundante especificado, El programa Shapel empieza & mostrar cémo funcionan las clases, EL PROGRAMA SHAPE1 SShapel es un programa se tipo C. pero ilests los siguientes aspecios de C++ f= Uso de la palabra clave sire para define una clase 1 structs con funciones miembo '™ Declaraciin,iniciaizacion,uilizaciéa y destruccién de objetos en la pila ¥ el monton. ‘= Creacién y uilizacién de une matriz de objetos Shape. = Uneenfoque de tipo para plementar Ic que se puede hacer con una forma. 1 Definiciores de fancién de wiembro en inca, Ba sense Cree el proyecto Shape como una Win32 Console Application, Cree los cuatra archivos de cddigo enumetados a continuacia, Creard el archivo Shape op cuanda cree el proyecto Shapel. A continuacin afada os tres archivos .hconel comanda "New. Para afadr un archivo .hselwcione C/C++ Header File en la pestaia Files el cuadra de diilogo New, = CPoint.h,un archivo de cabavera que declara la clase Pont. Ur rectingula se define mediante puntos er dos esqvinss, superior iequerda eirferior de~ recha. '# CRect.h, an archivo de cabecera que declare la case Rect. Cads forma est contenida dentro de un rectirgulo cicundante f= Shape.h, un archivo de cabecera que decara la forma Shape, 18 Point.h Wetter ot Rech SOC aiperoptett = ote 0) mpevetatahe + Relat (26,2005 17 cn sere age = ely mpencentgnt « bey 1 Shapesh Lrtges poribies ae forme motype =. typ Shapet.cpp Siptimicectsnape = RectPotnt (20, 20), Polat #0, 50)) sovasttoetttngis ote 5915, ‘thaper ogho2 = new shaper srecganpa te mets Dinpinsa rectabape = Race (Poknt (100, 100), Pose (280, 1809) Dinp2->a_typedhape = wipELLipee 120 , fortint 1200 4 207 460) Sew’ ahve ta = poise (nendomceord() Resdoncoord()) Dehosom svetanepe = Rect (pth, pea) seatgettt foster | ca Deavonepeiaranpettl)? (20,200) for ane $= 0) $¢20) Se¥) deters arsmpatsiy > ect rect = parm recta char arms (2017 shonectmele: atroprlertrpe, *recténguto)) cuasesoeces 121 * 11 “ajaapior srectangul> en (31,76, 987, 10091 Deteceteae ae (Ma NdeNe, MQ) Vas aRypey ele m2y ay Ane Relgne = ate (rect a pEBOERLght .y - reot-m pUTopie!t-¥)) pe-smrsectthapesn DEBOtULgRe = Pelae(p.x + wiéth, py + hetght): Moet feearn [shprrpe) (zend() 8 HOW TFPEE)) 12 [APRENDA MICROSCF VISUAL C+ 6 0YA C++ en el programa Shape1 La funcion main del programa Shape! esti en el archivo Shapel.cyp. Shape! epp utiliza la ditectva #anclude para incl ‘= Elarchivo Spe, un archivo de cabecera que declart Stape como una! sruct, junto con una enumeracién (lamada ShpType) de los tipos de ferma emiidos (retingulos y lips). 1m Verias catecers de la bibliotzca de tiempo de ejseucion de C++ que perm: texal programm Shapel utilizar las distintasfonciones de temso de jecucion, El archivo Shap:l cpp incluye otras cusntas cabeceras de forna indirect, ie cabeceta Shape h insluye CRect hy CRecth incluye CPoint.h Es otras palabras, {ncluyerlo Shape h incluimos las cabeceras que incluye y las ecbeceras que in- {luye cala uno ae los archivos inesidos. Deesta forma indireca,Shapel.cpp:am- bign ine uye CRect.a y CPoint h, como se justra en le Figura 42 SPREE eS aye 9. shonh lndupeceth) Figurad.2._ Estructura de archives cabecers el program Shape! cuasesoces 123 ‘CPointh y CRecth declarea otras dos seructs: Point y Rect. Point define un punto geoméirico, un objeto car una courdenada ¥ y una cvordenada yen un sis tema de coordenadas simple, ue se muestra en la Figura 4.3. Rect define un ree- tingulo en el mismo espacio, Rr esta definido por les coordenales (puntos) de ‘sus ingulos superior izquierdo y superior derecho. Estas coordenadss se espovifi ‘can en Rect como miembros dé datos de tipo Point Struct Shape, a su vez, define en el espacio de coordenudas del rectingulo que rodea la forma, un cuadro dent del cual se dibuja Ie forma. La forma también contiene un conjunto miembro 2 datos SApType al tipo de forme que representa el ‘objeto: un rectanguloo una elise, [Nota: Hay una razén para pone sl orgen delsstema de coordenadas el pate supe- rior rquerday extender os valor postvs y hacia aby. Vers por gut cuando legue- ‘mot los ustemas de cordenadasde Microsor Windows el Capitulo 6 Las structs en el programa Shape1 Las tres cl php: 1) asigue un pane Los puntos clave de este e6igo son ls doclaracidn de matriz, la ereacin de cada Shape y lt suna del punteroa la matiz para cada Shape nveva: Shaper azshpe(20); 1) beclasar na oacriz ds punters stape azsnee(h = pete: yy Xstane un puntero a1 Se esigna un nuevo valor de panteroa pSkp en cada paso através del bucle fo Pero el bucle slmacena una copia del puntero en la matriz previamente, asi que todos les punterossiguen siendo vélidos y 20 perdemos ninguno de los abjetos de mont. Qué hay mal en el programa Shape1? {QUE sacede con a programa Shapel? {No esté, ni mucho menos, lo suficiente- ‘mente crientad> a objtos! Nuest primera inclinacii fue hacer las cosas con los ‘objetes Shape, Toeavia pensando como los programadores de C > Pascal, esrii- ‘mos fincionesglotales que dibujany desplazan una “orma. En eeaidad, ia mayor parte del cédigo d:l programa Shape! esti en las funciones glcales. La propia clase Suape es sole una pequeta struct cor dos miembros de dats. [Lo,que realmerte deseamos es hacer que el obje'o Shape funcione. Para haces «so, lsfunciones recesitan estar dentro del objeto Shape. Deden convertirse en | ‘compoxtamiento de Shape, lo que hace (por comands} en lugar de lo que haces ‘con alana funcidm global. Asi que és es el plan pare la versGn siguiente l pro ‘grams Shape2. Ine vtemos tanta funcionalidad come podamas centro de fa clase Shape custs bcs 129 Mientras esumos en cll, empe:aremosutlizando Ia palabra clave lass. Aum {que una struct es una cla, prefiee utilizar la palabra clave suet, sin as funcio- res miembeo, para las ecsas que van todavia del estilo ce C, y la palibra clave ‘lass para objetos que tengan comgortamiento EL PROGRAMA SHAPE2 programa Shape? est nis reno a bjt ql progam Stell cao In inporant fs convert sds incgnsLsales Dn shape ovehape fanloncs lomo dm cae Supe Esuscon dos fusions lbs de She pel que nccfun on prc urchin puns Shpe Sue nome son ables Dron'y hove pou extn den del ebro Shape prc on eSape de ss rombres yu neces, Tcl us hoa lab lave casenlagard true esa ome revo, CShape saad eat conseion de tombramient de clases de MFC Tec Ctpiinels Todas lle de MC (ncayendo nar cuts Sac TeMrC) suena cnet Ura conten lions darn nombre ‘temo de gnbres de tr de cae, come elmembro'm reshape ce CShape Tos mines dc minrode nos tscseenperan pr meal e mie tron): Elunico gar enlque noble acorn mee stones Doemiembros eda clne Pur Faece mi picico mates my spl evar noma ls dash Pon yfecra CPonty Chet mn Shape? ucts tgs eaactooens de Go Funciones miembro de clase de pleno derecho, . '= Funciones miembro no defiidas en fine '= Acceso de funcién miembre a otros miembros de ease. EE punter shis,utiizado pam apuntar aun objeto desde dentro del propio cédigo de objeto. La palabra clave static, que e utiliza agai dentro de una fancion. Especificudores denceeso, pra contrlarel acceso de usuario a c'etos mie bros de ease. Inténtelo ahora Aqui tiene el eédigo para el programa Shape2. Como hizo.en Shapel, cree el pro ecto Shape?, y afada ls siguiemes archivos de cdi ‘© CPoint.h un archiva de cabscera que diclara la clase CPoin = CReet.h, un archivo de cabscera que declara la clase CRect. 130 APRENDA MICROSOFT VISUAL C++ 6.0.¥8 1m Shape.h, umarchivo de cabecera que dectara Ia clase (Shape, 1e2.epp. Este archivo contiene a funciér main y as inplementacions para los tresarchivos de cabecer Point.h Gholne (ine ze dae fy) x = tay y= ts Oy cnecth eopuate = hy mpenotnigne = Br! 7) cusespeces 131 (Bhape() {a recthape © cRact (cPotat (), cvotnt 30, 40))1 ccehape(cmact es shptype ") { a ructohape = x) a typefbare = ty ‘brew ‘Shape2.cpp Cihapessanptype Randowtyne) or OA MICROSOFT VISUAL C++ 6.0.¥A nt main(int are, char’ arpvt) 23), erotme (50, $0)°)9 mages pure? = ner (Gnuce (CFotnt (100, 2007, cPoiat (180, 150)), (Stnapersabpuitipeess Precmetty haps? armnoe(20)7 rang (eneSoned)edne (LL))) Cethapa® pabo = new conepe(? Bei = Grotnt nendencoora(), Readonceordt))? ‘pahg->tethect (rect) ‘Bang-sunetype (Rendeatype( 1 = phos Soret eanpe (0)- ove (cPoiae (20,20); Saupe to}oopeawtys fortine oy 3 20y deo Aeiate arengets}s 1 cusesoeces 133 32 1 eecemave. ya 1S eectanape mipenoentane char ermpetzeys Gene snprectangie: atcopy(artype, ‘rectangiet): speed 134 [APRENDA MICROSD" VISUAL C++ 6OVA (neteiae: rectingute 0 the cconepe sohptype tandontype() € 11 09 0 44 (De angnacranele « snpEiiipee? ‘Soeara”(Cebages anptype) (rend) © HOM_TTRES) 7 C++ en el programa Shape2 El prog:ama Skape?afiade varias funciones mas de miembro de clase serias. Estas hacen clgo mis que, simplemente, ajustar uw obtener el valor de un miembro de datos. Le explizaré lo esencial de las unciones de micmbro, presentaré el miste- roso puntero iis, explicaré los especificadores de acceso, mo controlar acee- Soa ikmbros de slase uilizande las palabras clave public x private, Eston0 {odav acl programa definitive Shape, pero es un gran paso haci Funcicnes miembro Las farciones miembro de clase se pueden definir es linea 0 no. El program Shi- pe incluye ejemp 0s de ambas. Para invocar una funcién de membro,wtlice it Sintans de selecicn, ya sea un panto para un objet ubicadoen la pila 0 el cpera- dor d acceso de niemibro de puntero (->) para un ebjeto ubicato en el month Este eétigo, dela funcin main, muestra la sintaxis de seleciér de miembro: Sept aetnect ac, 20) (50, $000) scenapes panes = Rew Gqece(CPont (100, 100), cPoint (288, 1500). ‘También puede utiliza el operador de acceso de miembro de puntero pera ‘ceder «un objeto fe Ia pila mediante un puntero en el objete depila cusesoecs 135 inape 203 by forma ex te pile {Shaper penp4 = s8n3: by aneere a Ia fore ‘pahot-ssettype (CShape:-#bpel:ipse); —*/ Uso "> pare acceder Una funciée miembroesté demo de su slaie, Como ta, tiene acceso complet + todos los miembros de datos derito dela slase. Esto se cumple, inchso, si algu- nos de los miembros se éeclaran cmo private o protected legaremes alos espe- ‘ificadores de acceso en breve. (El inico momento en el que una funcién miembro no tiene este aoceso es cuando la uncida se ceclara static. Hablaré mis sobre Ix palabra clave static mas adelante) Si mira en Shape2.cpp en ls defiriciones para Shape::Draw y CShape:-Move, vera lo siguiente ‘= ET nombre de funcion estéculificado, « precedido del operador de resolu- cign del imbito de clase, ono en CShape-”. Como la definicién de funcién std textualmenteseparada su prototio dentro de la declaracin de clase CCShape (en Shape ), debe cualificar el nombre de funcién para uni la de- finicién el prototipo. Inclus: aunque la definicién y el prototip estan ter> ‘nalmente separados. Ia defiricin yace dentro del émbito de clase. (Hablar® ids sobre el ambit de clase en el Capitulo 5, pero por ahora, bdo lo que debe saber es que mis de uma clase puede incluir una fancion miembro ler ‘mada Draw, por cjemplo.) Dividar cucliicar las definiciones de funciéa 'miembro es un error comit que hay qu: tener en cuen‘a. Aqui fene eéam las declaraciones de la funcisn miembre desde Shape-h, yacen ‘Aqui tiene cbmo se constuye una definicin de funcion miembro, a par~ tir de Shape?epp, ‘= Como las definiciones de I: funcion miembro caen dentro del imbito de Ia clase CShape, pueien utilizar ibrement: el miembro de datos ela clase los nombres de fuacisn micmbro sin niaguna cualiicacién, ‘= Como el enum SkpType esis declarsdo dentro de la clase CS'ape, CSha- ‘pe::Draw y CShape::Move también pucden utilizar los nombres de miem- 136 [APRENDA MICROSO"T VISUAL C++ 60VA bo ShpType, como por ejemplo shpRectangle y shpElips, sin tener que ‘ualficalos. Comparando una funcién de ayuda global, emo RandonT)- ps tendra que cualifiear los nombres de miembro ShpType con el operader Gs resolucior de ambito para poder acceder a ellos El puntero this ‘Aungue el prograna Shape? no ‘0 utiliza de forma explicit, anora es un buen ‘momeno de explicar Ia palabra slave rhs, Dentro de una funcién miembro de Clase gue no se haya declarado como static), puede utilizar la palabra clave this ‘Como ua puntero al propio objeto cefuncién. Por ejemplo, st invoca CShape::Draw para unadjeto CShepe llamado sbp!, dente de la funcién Draw esto apuntatia al Uojete sp! Dentn de Draw, podria acceder a un miembro de datos CShupea través cel puntero is, de esta forma ccestup enon gpeseonein than ef Sinembargo, puntero this ene usos explicitos. Es itil en cualquier momen to.que secesite Ia direccién del objeto actal {Cuando podtit necesitar esa direccién? Aqu tiene un ejemplo. Puede wilizat esto paca faciliar h comunicacion entre des objetos. Imagine que el objeto Cet! feces permit que el objeto Accountant acceda alos mierrbras de clase Client {Un moio de hacer esto (pera no el mis faci, consuite la palabra clave friend, gue se describe en «Et programa Friend» mis adelante en este capitulo) es para gv “Aocourtant mentexga un punteroa Client, Pero ge6rw obtien: Accountant us pun~ {ero 2 lien’? El onjeto Client, iicialmene, invoca na funcin miembro del ob- jeto Accountant para auoriar cl acceso paséndale a Accowatart un puntero ‘vuelve a apuntar a Client. Luego Accountant puede wiliza ese puntero para ace Ger araiembros deClien, ajustardo de est: modo una comunicaeion bidireccioral entre los objets. La Figura 4.4 muestra el resultads "Agi tiene cdtao podemos hacer esto. La fune que se est ocultando, asi que ;que es exacta- mente le que quiero deci? Ocultsignifice «ccccso restringidan. El eqpesificadar private refuerza nuestro deseo de que los miewbros que genera no sean accesibl ' os usuarios dela clase. El comp lador ne permitird a los usuarios aceeder diree- tamente. Sin embargo, «los usuarios necesita atin tipo de acceso inlitecto,y 8 menudo es el cso, es decision de disehador de Ia clase proparcionarfenciones ce acceso piblico Estas son funciores como las de CShape que empiezan con «Sev» 10 «Get». Le permiten acceder a laimplementecion oculta de an modo controlads Hay al meros dos buenas razenes para semsjante control estrict: 1. Imagine que necesito hac algo ms que, simplemente, asignar un pari- metro aun miembro de des privaio. Pongamos por caso que invoca wa funcién miembra, pasandoun valor irt para que Se almacene =n la clase Pero en ealidad necesito cear un cheto de alin tipo y pasar su valor int al objeto nuevo, En otras galubras, pusde haber opereciones extra rea zat ene bastidoes cuando invogue tna funcién miembro simple. Como tun segundo ejemplo, puede que yo neresite incremensar 0 desrementar en contader cuando invoque na funcibn miembro. Levar a cako estos tipos 4d openiciones extra utiliando mizmaros de datos privados éentro dea clase asegura que estas coas pueden pasar. Probeblemente mo puedo con- tar con los usuarios para recordar hace" las cosas extra o hacerls en orden adecuado, pero con una cedificacin deensiva, puedo reforzar mis desecs 2, Si mi implementacién de clase esta oeulta, puede cambiarlaIbremente a alguna otra implementaciéa mis tarde.y que afecte tan poco as progr (que utliza mi clase) come sea posble. Si no cambio a interfez pablica a Ia clase, las funciones de a2ces0, lo miximo que tiene que hacer ¢s volver 140 APRENOA MICROSGET VISUAL C++ 6A 4 generar sucddigo con miclase motificada. ¥ solamente tendré que hacer ‘50 si desea aprovechar mi nueva y mejorada implementici6n, Por eje- plo, en su primera versin, mi clase puede aimacenar datos en un archivo srdinari. Mas adelante, e2 su lugat, puede que yo decids implement iy ase para que almacene les datos et una base de dats. She ocultado mi -mplemenain, es cambser repre sted ros wari eDeberian ser siempre privados los miembros de datos? Ccultarmiembros Je dats y algunas funciones miembro tiexe sentido en ciertas situac anes, pero ne una reglaabsolua, Si echa un vistazo sls clases CPointy ‘CReck, vera que no he ullizado 21 especificador private en elles. Las clases de jpoca ut lidad como ésas deberian ser tan simples y aiertas como sea posible. Pero flgunasclases debcrian ocultar sus datos. or ejemp., un matejedor es un objeto ‘a travesdel que puede aceeder a un Bloque de datos privados indiectamente, para llegar aaccede’ completamente 8 los datos, debe obtener el manejadory a cont- nnuacior utiliza: farciones de acceso publivo para trabajar cen les datos para ls {Que esl manejida’, Sino desea cue nadie rea eapaz de cambiar uilizat a alee {el marejador, de érelo privado. (EI propio manejadot, ai como el objeto al gue se conesta, es frivado) Este es un escenario comin, paricularmente en la prox ‘macién de Windows, [Le mayor pate de las clases do Ia biblioteca de MFC son bastante abiets, sin seeciencs privadas. Los disehadores de biblioteca fueron lo saficentemente per Picaces como para saber que mo podian predecietodcs las Formas posiles en ls ‘que los programaderes pueden utilizar sus clases, asi que los disehadores evitarn Tas coxes que pede ser obstaculos para les usuarios innovadores. Si por easual= ‘dad evcrbe cleses que amplian la biblioteca MFC, deseara adcptar una acttud similar, Convenciones de comentario de cédigo fuente de MFC Puede que hays nctado que los comentarios especiales en ls cases que hemes visto hesta ahora, «on de este modo: 1) Opmsachcten Los comentarics siguen una convencia MFC que hace que ls archivos ¢€ cédigo fuente de MFC sean mis files de leer y entender. La mayor parte de les ‘comertiris se util 2an para agrupar miembros de clase similares como consruc- tores, e+ un lugar ici de encontrit. El comentario Isplemeniation es el masitt- resante Indica lo: lectores que «todo desde aqui hasta el final dela case es parte cusesoece+ 14 de laimplementacién, ro esté dacumentado piblicamente,y no puede contar con {que permanezsa igual en Ia versn siguent de la clase». Normalmente, MFC ‘deja muchas de sus implementaciones de clase abiertas en el sentioo de que son pilblicas mds qve privalas. Asi qe puede wilizar miembros declaralos después fe la linea / Implementation. Pere hace esto bajo su propio riesgo, sa c6digo pue- de romperse silo Wwelve a generac con la versin siguiente de clase, Para obtener mis informacin sobre as converciones de cidigo fuente MFC, y scbe Ia utiliza- ‘inde los archivos de cédigo fusnte MPC, ennsulte el Apéniice «E!cOdigo furn- te de MFC». Utlizaé el comenario MFC y otras convenciones MFC a lo largo el libro. ‘Tendré més que deci sobre las especfic dores de acces, incluyendo unt cer especificador prote-ted, esprés de echat un vistazo al programa Shape3 en el Capitulo s. Variables estaticas La palabra clave static reduce ls necesidad ce variables glovales. Utlizando sia tie, puede dedlarar un miembro ce datos de clase que tiene el efecio de variable tlabal (devueve su valor), pero todavia es local la clase. Hustaréeste uso de Siaric en el programa Snape enc Capitulo 3. También puede devia una vaia~ ble local dento de una funcin como estticz E programa Shape? ilustra esto en su funeién de ayuda global RanaomCoord (ela seceién «Shape? spp» anterint- Imeate en este capitulo), que gerera las coordenadas que definen los CPoinis y CRects, "Echemos an vistazo mas de cerca al problema que stata intend resolver ‘en la funcidn RandomCoord. Queria basar la siguiente coordenada aleatoria en la ‘oordenada aleatria previa (si esque existe alguna). De este modo tuve que alraa- tenar la coordenada previa donde RandomCoerd pudiese aceeder. Si RandomCox fuese una funcin miembro de ¢ ste, podsiaclmacena la coordenada previa en un rmiembro de datos de clase. Perc como RadomCoord es una funcion global la Inejor solucion parece ser una viable glbel (con Ambito ce archive). Tina solucién, incluso, mejores utilizar una variable local estitiza dentro de ‘Random€oord. La primera ver cue se invoca RandomCal, eneuentrs 1a variate, hLastCoord, a inciaizada & cx, justo lo que queremos. (C++ inicializa auco- tmiticamente as variables locales, pero no sus homéogos no estatices, a la forma propiada de cero: 0 para un int por ejempo, o 0.0 para wn doubie, o Null para tuna variable de punter.) ‘Durante la primera invocaciey 8 RandomCoord, la faneibn genera una coonde- nada aleatore nueva y utiliza la mayor de nZastCoord y nNextCoord. (Queria que Tas coordenacts siguientes fuessn mayores ue las aneriotes.) Luego la funeson almacene el valor resutante en nastCoord, reparada para que se utc la praxi ‘ma vez que se invoca la funcién, Como nlasiCoord se declar esttica, 3 valor se retiere entre las invocacio- nes de funcién, Esto et lo que hice la variable similar ¢ una variable global. Estx

You might also like