Está en la página 1de 82
El lenguaje de programacion C++ Bjarne Stroustrup 2 Ellenguaje de programacisn C++ Notas para el lector «Ha legado el momesto>, dijo la Morsa, ‘ide hablar de muchas cosas.» L. Carroll Escructurs del libro — aprendizaje de C4+— el éisefio de Cr+ — eficieneia y structure — nota filosStica — aotahistrica — uso de C++ — Cy C+ — ah ‘gerenciaspara programradores de C — sugerencias para programadores de C++ = reflexiones sobre piogramacsén en Ct — consejs —referenciss sy th, Marcus, me has dado muchas cosas; ahors voy a darte yo un buen consejo. Sé ‘muchos. Abandona el juego de ser siempre Marcus Cocoza. Tehas preocupado demas estructura del lil do por Marcus Cocca, yen realidad has so exclave y prisionen suye, Notas hecho naa 11 Estructara del libro sin considerar ante: c6mo podia afectar a felicidad y el prestigio de Marcys Cocora El presente libro consta de ses partes: ‘Tenfas siempre mucho miedo de que Marcus hiciera una toate ia se aberriers 2 que Tnicodueide: Los eapitales 1 a3 ofrecen un vision de sonjunto del lenguaje C++, los importiba? Toco e mundo hace tontris.. Me gustaria que Mueras espontéreo, que estilo clave de programacién que soporay la biblioteca C++ estind. coraz6n se iuminari de nuevo. A partir de ahora detes ser no una sino muchas persons, Farte fi Les capitulos 42 9 proporcionan una introduecisn didactic Tos tipos pre- tantas como puedasimaginar...» deiinidos de C++ y a los recursos bsicos para constuir programas a partir de els, Karen Blixen Farte Il Les captulos 10 15 son una inrocuccisn didetica a la programacisa orien- “The Dreamers taca a objetos y genérica con C+ Fate Il: En los captulos 16 a 22 se presents la biblioteca C++ estindar Fate IV: Ex os capitulos 23 a 25 ve estudian temas relasionados con el diseRo y eld saurollo de software. ‘Apéndices: os apéndices A, B yC contiexm detalles sobre los aspectos técnicos del Tenguaye Ei capitulo 1 o'ece una visiin de conjunto del ibro, algunos consejos sobre cémo usarlo € informacién fundamental sobre C+ y su uso. Animo al lector a que lo nojee, Tea To que le parezca intewesante y vuelva a él tras leer oss partes det libro. Los capitulos 2 y 3 ofrecea una visin de cosjunto de os conceptos yearac as pri var al keetor para que dedique tiempo a los concertos fundamentales y las‘caactersticas basicas del lengucje, mostrindole lo que se puede sxpresar usando todo el knguaje C+, Cuanco menos, esos capitulos deben cnvencer al lector de que C++ noes (slo) C.9 de que C¥+ ha recorsido un largo camino desde la prinera y segunda ediciones Je este libre El capt ulo 2 sieve para familiarizase a ako nivel aon C++, Se analizan las caracteristicos del lerguaje que soportan abstraccién de datos, programacién orientada a objetos¥ pro _gramacs6n genérica. El capitulo 3 introduce los priipios bisi:os y los componentes prin. cipales de la biblioteca estandar, Ello me permite usar compenentes de la biblioteca cx. ‘iindar en los capitlos siguientes, yal lector le permite usa: cemponentes de la biblioteca en fos Gercicios, ex lugar de trabajar direciamente con earactevsticas predefinidas, de me~ nor nivel Los eapitulos inroductorios ofrecen un ejemplo de una Kcaica general que se aplica a lo largo-de todo el libro: para posibilitar un anglisis més direct y realist de slguna len ca 0 camacteristica, en ocasiones presento primero trevemente un concepto y mis adelan- te To anilizo en profundidad, Este planteamiento re permite afrecer ejemplos concrcton antes de presentar un tratamiento més general del tsma. Asi pues, la organizacidn del In bro refleja Ia idea de que habitualmente aprendemes mejor avenzando de lo concreto alo abstracio, aun cuando, al mirar ari, lo abstracto parezca sencilioy evidente La Parte I descrbe el subconjunto de C++ que sporta esti os de programacién tradi- sore. ine y merge: capitulos 18 y 19), eadenas' (capitlo 20), EntradySalida (capitulo 21) y scpote para compulacion au, mérica (eipitulo 22) {La Pare TV analiza cuestiones que surgen cuando e usa Ci en el disefo e implemen: ‘A to lange de todo el ibro, se uiliza scadenas fen inglés. sting) como sinGnimo de «secuensis se carsetere= (Nde ws F) he an pata er enu cin de rds sem de sofa capo 23s et le asin Seconelal ngs, nap ex sn ele leu de sescetraciin C2 1s peblemas ce dso. Hl capo 25 presents agus fo rack aeae “++ con unas cuantas anotaciones. En el Apéndice es, PANSICo¥ yas versions gu lo an preclio, EL Apéndise C pret slguros cjem- Pion de aspects nics del lenge 1.11 Ejemplos y referencias este lito se hace mis hincapé etl organic del programa queen Ia es [or igortmos En covoseniz, he via ener agortnos ingens o dls de comprendér, Habituslmente un algorimo trivial es més apropiado para iistrar un aspecto Gl definciéa del lengusje o una custdn relac onada con a estructura cel programa. As Per jeph lain de ran data camden dg ral sea ner hnétdo ripdo. A menue forma pane de los ercieios una reimplementcién eon un al- fbrimo mis adecuado, En ego rel, una Imada ana fnciGn de biblioteca suele ser Insapropada que el cédigo utlizad> en el ben para ilustrar caractevsteas del lengua Tor cempls de mama hn neesiamente ns isin deforma dl desroll de set war Al rier y simp os empos dspace fs compas bias a cesccla. Noenouentro nads que puede susttut ala eserturs de programes de tama real pare formarse una idea exacta de c6mo es un krauaie de p-ogramacién. Este libre se cen- te en as caractriticas ds enguaje ls temees basics a pani de lis cuales se compo- nem todos os programas y Is reglas de compos cin : La selecién de ejemplo refleja mis antecedcates en compiladores, biblioteca y sim: lkdcres. Los ejemplos son versiones simplificales de lo que se encuentra 2n el c6digo real La simplifeacin es necesaria para evitar que e lengusje de programaciin y los aspectos Se eto piardan eno ees No hay ej estas incite m do ral. Siempze que ha sido posible he relezado al Apéndice C los ejemplos relaciona dhs son ater tencos dt lenge los qu se san variables mada 3, pos A yB.y funciones 0) y 80 ; En os eemplos decd go se usa tn ipo de cra de sncuraproporsional para bs iden Ia esertura de Iifieadores Por ejemplo: include ostream int main) sté: scout << "Hola, nuevomundo | a Aimer ist ete ex de prsenicin pds pares cannes alos prog mado Tes acstritradca ver el digo en ips de era de ancurs constant, Sin emtarg, fs tot de aachuaproporcinl ecorsigeranen general mejores que bs de anc con tate pa a proseniciénde texto. Usarun God anc popocigal me pert ta bien presenta el ebigo cn menos sites de nea lgos. Ades, lo speimenon gue he realizado demaestran que It mayor parte de fa gente encventra enseguida el n tilo ms ficil de eer. ‘Siempre que es posible, las caractersticas del lenguajey la biblioteca C++ se presen tan en su comtexta de uso y noen la forma drida de un minus, Las caractersicas dl ler {Buaje presentadas el detalle con que se describen reflejan ri punto de visa sobre I que Se necesita para un uso efectivo de C++. Un libro complementario, The Annotated Cx + Language Standard, escrito er colaboracién con Andrew Keenig, conticns la defricion ‘completa del lenguaje, junto con comentarios cuyo props es hacerlo mas accesible. Légicamente, deberia haber otto libro complementario, The Annotated Libsary C++, Sin ‘embargo, dadas nis limitacionss en cuanto a tiempo y cepacidad para escribir, no puedo prometer que legae a producito. Las referencias a otras partes de est libro tienen la forma $2.34 (capitulo 2, agatado 3, subapartado 4), §B.5.6 (Apéndice B, subapartco 5,6) y §¢.6[10] (capitulo 6 ejecicio, 10). La cursiva se usa en ocasiones pare destacar galabras (pcr ejemplo, «un literal de ea. dena no es aceptable»), para sefialar la primera aparicién de conceptos importantes (por ciemale, polinorfsmo), para simbolos no termirales de ia eamatica C++ (por ejemplo, sentercia:for)y pera los comentarios ens ejemplos de eédige, Se usa cursiva negrila para representa identfcadore, palabras clave y valotes numérico en los ejemplos de clio (por ejemplo, elas, contador y 1712), 1.1.2 Bjercicios Los gjercicios se encuentran al fnal de los capitules. En su mayoria consisten en esribir un programa. El lector debe escribir siempre cédigo sufcient: para que sea compilala sjecutada una solusién con al menos trex casos de prueba La dificultad de los ejerseivs varia considerablenente, por lo que se indica Ia difcultad estimna para cada ano mediante tuna eseala exroneacial, segtin la cual sin ejercieio (*1) le Leva al lector diez minutos, tun ejercicio ("2) puede Hevarle una hora y un ejecicio (#3) un dia, El tiempo necesario para escribir y probar un programa depende mas ¢e Ia experiescia del lector que del eer. ici en sf, Unejersicio (*1) Hevaria un fa si el lector tera que familiarizase primero con un auevo sistena informético para cecutatlo. Por el contario, un ejerccio (°8) po. dria hacerlo en una hora alguien que casialmente tuviera i meno la coleccién de proga 4 adecuada, Com fuente de ejervicios extra para la Parte I se puede usa’ cualquier libso sobre pro- {gramacién en C, y vara las partes II y III se pueden usar libros sobee estructuras de dntoe Y algoritmos. 1.1.3 Nota sobre inplementacién El lenguaje usado es este libro es «C++ puso», tal como se define en el estindar C++ [Ce 1997), En consecuencia, los ejemptos dcben funcicnar sobre cualquier imp ementacién C++. Los principales fragmentos de programas del libro se prosaton usando diversas int. plemertaciones C+-. Los ejemplos en los que se usin caractersticas adoptadas reciente ‘mente en C++ 10 compilaron en todas las implemertaciones. Sin embargo, carece de ine exes mencona uéimkerentact allée a complain de qu ejemplos. eejante Fformacidn quedaria enseguida anteuada porque los implementadores estén trabajando tmurho para garantizar que sus impkmeentaciones acepten correctamente todas lis carac- Bee ct rerencias sobre céme manejar- Tifucas de Cra Snel Rpendce Bencontrarel ltr s sa nase CH amigos 9 eo digo cc's pra compindores 1.2 Aprendizaje de C++ ‘asar versiones anteriores y menos enpresivas d: C+ Cemo consecuencia de lo anterior, el lector va a usar C++ —a menudo para crea ss tema: reales— antes de comprender todas las carscterstcas ytécnicas Jel lenguaje. Al vo Porta diversos yaradigmas de programacién (cagitulo 2), C++ soporta programacivn pro. difieren sélo en la forma en que sedefinen, no en la formaen que se usan, La biblioteca estindar C+ Ses tradicional de compilacién y tiempo de eje- ‘eaciGn: cl ertomo de programacisn de C enel sistema UNIX. Afortunadamente, C+ nunca eente uss UNIX y C como modelo para la‘ relaciones icin, ewstera. Ese he estngido a UNIX ‘Ei ergo blocs compisdres, eladore, tors dee eae meme aya Co a sli sitoso en praca nent calguerplatfra ini vat Hay in embargo buenas acones pi war Cen enoros go popionan is tate mn scp Se puede sacar partido de recurs Com larg namics, la comp [iSec'acrenental y ura tse de nos de Ufnciones depo sin aca l nga i ernaeisias de Crs de comprobecisn de tposy cclacion de datos se bisanen et niigs defo propamas en tienpo de concn yrs mpercrupones acide ther de losdaos, No paporcioan confencaldad oproteccidn coniraslgulen que ticumpladiberadamene las norm, Sin ritargo.e pueden war con lide inn Fare costes de temp de eecucn ni deepaco, La de gue gra ge sea il, na Caractere de lenptje de eo slo cant, sino tabi snequible en el cote Parana descrpcién stematicay dts ada (sruseup, 198 Usefio de C++, conse el lecior 131 Bice Cee se desarollé a paride emus de srogramacisn Cy, com excsasexcepcios cancers € somo sibempnt.Ellengaje ise, e subsonjuno C de Cos, eal isedao Ge Yorn gus haya una eaecha cespnde ca ene os lips, opetadoresy seen Sos ojtos de los qi se ocupan decane lox conputadres’ nero, carvers y Sireecones Salvo patos operates new, delete, pert. dymamic_cesty throw, eH tae ls xpestonssentencas Indias Geno nsestan spre deienpo de 7 (C++ puece usar las mismas sectencias de llamada y retorno de funciones que C, u otras ifs ef ienes Cano incluso ess mecanisnoselaareneefilenes son dersiado Costs se puede ssi enn una fron de Gr, de modo ge poets dita Ge la comociad nota onal de las funcions sin cows ren emo de jean Una ds ialidade orginal de esse coliicaion en lenge ens tar pra ares ns exigens de proamacin de ssemas, Cando se dsehS Cow ano compomete le ganado cr cxa ea, La diferencia entre Cy Ces race fondamentmen ens rado de enfans cre Ls tipsy la ester, Cs cxpresivoy mermisiv. C1 es ans expesvo. Sin enbaro, pra cnsegirese iment cx expesivnd hay gue prestar nis atenion los tp de lo objeton,Conocendo os pode los abjtos el compiler puede meneercorrectamente expesonesensitacio- revels qe, de oro modo, habamosterco que espesfcar las operons ast el m= fimo deale Conoer os pos de ls objet emit as nismo al comarca ro fs que de cro meds hbrfanprsto hasta prs, inclse made Hay i tener tv cueringuc el ws del etemac pos prt comprar argimentos de fncinne, pate fer los datos de una cope acedental. proporconsr nuevos ipo. proporionr nk: y estructura ‘© presté gran atenci os operadores, tetera, no aumena Tos cones en cuanto a tempo de jeccin ne pacio en C++, ea Ls inportancia conceit extrac en C+ reflec el mento en In esl fos progaras estos desde ques ise6CPodemos hace funciona la uerzaun propane Peau (OD lines, por explo) au np tc a ei et Bune tio, Peo no ccur lo mismocen in pean mis pande: Sila esrctra de un pr. tad D000 ines es mal, decubrreros es todenweves emerson lama velocidad con que se eliminan Ins antigass. C++ fe dsetada para hacer psible due lou proganas mis grands se estutoraran erancra raion de modo qe fer aie sue me peson se ocoara de cantidadesdecoign mucho mores Ades se pce 4a que uma lites promedio de eSdigo Cr+ expesira macho ns que un tea pre de elizo Coase. ests auras, Cor ha leanzado con exces eso bjtvon, No dos los fegments de efdigo pueden estar bien esucurados se nlependcntes del rear, cies dele, eer, C+ pose caters stn eas pas spar cures del hardware de manera Sects yeicen, i fener en cuenta asi dado facade comprenion, Pose simismo recurs para oto et edgy de tes ees elegans y spurs Natwalment, el uso de C-+ para preramas ns grances conduc a wsode C++ por srupos de progamadores El nse de C+ cn laura, ls interac. fuera, te tpt Ta Nex bildad demestaenknces st valor. Fl equi de recieson de Cos pra scribir programas grandes nolo tne ning lengua. Si embargo medio gue fos programas on ms grandon, probes mevad cna kesarro mena pasan dese problemas de leeguaje st problemas mis des de heramintae es Sdn. Ena Pare TV se explora algunas de ests tostions nese libro se hace hincaié on genic que sive para preporconarrectsos de po- pésito ger ties de gran liad, iboteas, tetera, Ets cea seviin a) a lo detadores de ropramaspegtetioscono alos de programas eande, Ader y ded 4 que todos los programas no tiles se componcr de muchas partes semindependenes las téncas de serra de eam pats siren & tos programas de cunlguer pcan leo posta pensar qu a speifcion deur programa metiant el so de ana trctura Je tpos mab detalad da gar awn texto fuente dl programa ms lrg, Con Ce noe 51 Un programa C+ gue declare hs pos Tos arzumentos es fcione oe se ls, etter ser haitualente ws poco mis corto eee programa Cequislate due no enplee esos recursos. Cusndo se tse bibltsas, un peprana C+ reuad ho mis corto que sv equivalent C, supmiendo,ntramem que se pai consis un egtatente © que funciona 1.3.2 Neta fleséfies Un lengeaje de arogramaci6n cumple dos propésitos relacionades entre sf: proporciona an vehiculo para que e! programador especifique accicnes que Jeben ejecutarse y propor: ‘na un covjunto de conceptos para que el programadcr los use cxando piense en lo que se puede hacer. El primer prop6sito requiere. idealment, un lengaaje que esté «préxime a Ja méquiva», de mado que todos los aspectos importantes de uia méquina sean mance dos con sencillery eficiencia, en una forma que sea rxzonablemnte obvia para el prosts maor, El enguajeC fue diseiado prin de et es El segundo propos rege IeSondicion’ ia. um longuajeque exe sproxim a blams # resolver, de male on pond expres forma eta concisa fos concepos ce na soli. Los Nos tas aC practear Cr+ fueron sade prtendo de xa srgonexign ent ef Tenguaje ene ue ptsaonprog-amaros yo problems y 50 tacos qu poemos imagines ny eset, Porestararo, restr las crater teeta enpaj con el fn deena ere del prograador es, camo minim pel to. Come ocure con fos lengua auras, ten grandes verse er al mesos Blin ste, Un lenge prporcona aun rogramaler vn cynuno de herenancenceptua tom nieces par na tare simplemente an asin, Ex iposiblegraiza Siscen sen Te ausenc Je eres por aera presenti oasencia de caraersticas sspeticas dl lenge remade pos debe ser de epecialwlidad paral areas notes. E concep vode clase de Crt ha Gemostado una pene herent concept 1.4 Nota histérica Insenté C++, escibf sus primeras de'iniciones y produje su primera implementacién. Elegi y formule Ios erterios de dsefo par: C++. diseXé todes sus recursos principales y me hice ressonsable del precesarniento de prepuestas de extensionesen el comiké de estindares C++, Sin duda, Cr debe musho a C [Kernighan 1978] C te conserve como subsonjunto, También he conse-vado el Snfasis de C en recursos que son de nivel suficientemente bajo pam afrontar hs treas més exigentes de programaciin de sistemas. C, por su parte, debe ‘mucho a su predecesor. BCPL [Rictards, 1980}; de hecha, la convencicn de conentarios {de BCPL fue reintroducida en C+. La otra fuente importante de inspiracign de C++ fue Sirwla67 [Daal, 1972]; el concepte de clase (con clases cerivadas y funciones virtues} se omé de él. La capacidad de C+ para sobrecarga de operadores la libertad de colo- car una declanicion en cua quier Ivgar en el que pueda apirecer una seatencia recuerda a Algol68 [Wocdward, 1974], Desde la egicida original de este bro el lenguaje ha sido revisado y perfeccionado am- plizmente. Las reas principales de revisin fueron los recursos de resoluciin de sobrecarga snlice y gestiin de memoria, Se hicieron ademis diversos cambios menores para aumen: tarla compattilidid con C, Se aftadizcon varias generaizaciones y unas cuantas excensiones Drivcipales, ente las que se ineluyen: herencic multiple, unciones miembro static, fun ones miembro canst, miembros protected, plentillas. marejo de excepeiones, identifica: ién del tipo en iempo de ejecuciény espacies de nombre. EI motive comiin deestas ex- lensiones y revisiones fue hacer de C+ un lenguaje mejer para escribir y usar bibliote 08 La evolucion de C+ se deserite en (Stroustrup, 1994} 51 recurso de plantllas fue disefado originalmente para soportarcortenedores de tpi Ficaci6n estétca (ales como lista, vectores ¥ mapas) y Fara soportar un uso elegante y Bfisiente de esos contenedores (programaciéa 2enériea). Era objetivo fundamental redv- firel uso de macros y moldes (casts conversiones explicitss de tipo). Las plantilla se ins- Piraron en pare er los genéricos de Ada (tanto en sus puns fuertes como en los débiles) ¥ ex parte en os médulos farametrsados de Clu, De forms semejant, el mecanismo para manejo de excepeciones de C++ se insvts patcalmente en Ada [Tchbiah 1979], Clu[Liskov. 1979" y ML Wika, 1987] Ovo anes indi ene 1985 y 1998 —como la here mito son virus usta Se mbsf ae lo geeaiacovesimpulada po la xperiencs enel wo de Cry no ides tapos das de otros Jenguajes. . be ee Pete a. Drsce 1980 se ha wsadovensoes incase gust cmocdas en cost cero lioteca de tareas descrita en [stroustrup, 1987] y en §12.7[11] forné parte del primer programa «C con clases» que se cacti. La esribi, asf como sus chses asocialas, para soportar simulaciones ce estilo Sinvula. La biblioteca de tareas ha si revisada y reimplementada, sobre odo por Jonathan Shapiro, y se sigue usando ruucho, La bibliotee de flys (em inglés, streams) que se des- ctibe en la primera edicidn de este lib fue disefudae implementada por mi Jerry Schwarz Ta transforms cn biblioteca de flujos de E/S (cantulo 21) wsando la técnica de manipula- or de Andrew Koenig ($21.46) y ots ideas, Ls biblioteca de Mujos de B'S se perteccioné Tuego durante el proceso de estandarizicién,realizando el grueso del tao Jerry Schwar7, Nathan Myers y Norihiro Kumagai. El desarrollp del recurso de plantllas estuvo influido por las plantas veetor, map, list y srt. ideadas por Andrew Koenig, Alec Stepanov, otros autores y yo mismo, A’su vz, el trbajo de Alex Stepunoy sobre programacién genérica ‘con uso de plantillas desemboos en lis partes dc contenedares y algortmos de la bibliote- ‘ex estindar de C++ ($16.3, capitulo 17, capituls 18, $19.2). La biblisteca valarray para ‘computacion numérica (capitulo 22) 2s Tundanentalmente trabajo de Kent Budge 1.5 Uso de C++ CCertenares de miles de programadows usan C++ en précticamente cuslguier dominio de aplicacién. Este uso esté soportado for alrededr de una decena de implzmentaciones in ‘ependientes, centenares de bibliotesas, centenares de manuales, diversi publicaciones léenicas, muchts conferencias e innumerables consultores. Hay formacién y ensefanza a tna ampli vasiedad de niveles Las primeras aplicaciones tenian generalmene un fuerte aroma a programacide de sis- temas, Asi, por ejemplo, varios sistemas operativos importantes han side escrtos en C+ [Camphell, 1937), (Rozier, 1988}, [Hamilton, 1993], [Berg. 1995], (Parrington, 1995] y muchos mas tienen partes clave hechas en C+. Consider€ que para C++ era esencial una rgurosa eficieacia a bajo nivel. Estonos permiwe usar C+ para eseriir controladores de sdspositivos y sofware que s° basa enla manipulicién directa de hardware con restricciones. ‘de tiempo real En edidigo de ese tipe la predecisilidad del rendimie {an importante cono la pura velecidad. 4 menudo lo es también la compacidad del siste- ‘ma resttante. C+~ fue diseRado de mode que todas las caraceristicas del lenguaje sean utitizakles en +1 e6digo en condiciones de fuertss limitaciones de tiempo y essacio, [Strouseup, 1994, $4.5}, ‘La rayor parte de las aplicaciones tienen tramos de cédigo que son esencales para un rendimiznto aceptable. Sin embargo, la mayor cantilad de o6igo no esti en es0s trams Para la aiayor part: del c6digo, la mantentbilidad, ht facilidad de extensin la facili de prucha es clave. Bl soporte de C+ parz estas cvestiones ha conducido a su amplin wo siempre que la fitilidad es indispensabee y en drezs en las que las necesidades camban Significativamente a lo largo del tempo. Son ejemplos de cllala banca, el comercio, om ‘seguros, las telecortnicaciones y las aplicaciones niltares. Durante afos el control cen tral del sistema telefnico estadounidense de larga distancia he confiado en C+, y tots tas Hamadas 800 (sin coste para el abonado que Ilana) han sid encaminadas por un ps ‘grama C+ [Kamats, 1993}. Muchas de estas aplicaciones son grandes y de laiza vida, 2 onsecuencia, luestbilidad, comptibilidad y posibilidad de cambio de escala han sido pre ‘ocupacicnes constates en el desarollo de C++. No es infrecuent: encontrar programas C12 de un mil6n de lneas. Al igual que C, C++ no se diseié espeetticamente para computacién numérica, Sin em bargo, + hace con C++ mucha computacida numén:a, cieniica y de ingenietia, Uns tas 26n impertante pare ello es que cl tabaje sumérico tradicional debe combinarse a mens 440 con grficos y con céleulos que se basan en estructura de catcs y no encajan en el mold Fortran vadicioral Budge, 1992}|Barton, 1994], Les gréficns las interfaces de usuario Son éreat en las que se usa mucho C++, Cualquiera que haya usado alguna ver un Apple ‘Macintesh o un PC zon Windows ta usado indirectamente C++ porque las interfaces pi- ‘marias de usuario d: esos sistemas son programas C+, Ademés, algunas de las més po- Pulares ibliotecas que soportan X para UNIX estin escritas en C++. Asi pues, C+ es una ‘pein babitual pars el vasto niimero de aplicaciones en las que la interfaz de usuario ex luna pane importante, ‘Todo bb anterior efala el que puede ser el principal punto fuerte de C++: su cupacidad para ser .sado cane icacia en aplicaciones cue requizren trabajoen diversas dreas de apl- caci6n. Es bastante recuente encontrar aplicaciones que entraian integracign e1 red local y de grat amplitud. andisis numérico, grificos, iteraccién del usuario y acceso a bases de datos Tradiciona mente estas dreas de apicacign han sido cotsideradas distintas y han Sido atencidas casi siempre por cominidadestéenicas iferentes que usan diverss lengua {de progrmacién, Sir embargo, C++ se ha asado amoliamente en todas esas teas, Ades mis, puece coexisircon fragmentes de cstigo y programas esctitos en otvos lenguaies C++ es ampliamente utlizado e1 la enseianza y |tinvestigacin, Es algo que ha sor Drendidos algunss personas que —acertadimente— sealabaa que C++ no ese lenge ans pequeno ni més limpio de fos que se han disefado, Es, sin embargo: ~ sufcientemente limpio para Ia ensenanza de Jos concepios bésicos, = stficientemente realist, eficiente y flexible pata proyectos exigentes, ~ suficientemente accesible para organizaciones y colaboraciones que se apoyan en di Tintos entorros Je desarrollo y ejecucién, ~ suficientemente amplio como vehfculo para la enseflanza de conceptos y técnicas avawades, y _ sufiientemente comercial con vehiculo vara poner en uso profesional lo aprendido ‘C4 es un lenguaje con que el lecor pued>«recer. Le Cy Ct fancion en ambos sertidos. As, por ejem ce i de punter ved fue inventado para ANSI C e implemenado por primera vet tncrs. Com se promt em la pera eden de este. se ha eis la defn Clin de C++ para climinarncompatbilidades gratis C++ es ahors ms compulible con Ce fo que loeraonginamente. Lo ideal era que C+ extviera tan prbxioo a ANSI-C ome fuera posible, pete np més [Koenig 1999. La compatbliad teal nunca fue una rea porque elo compromereria a sguridad con especto a os ios, laintegrackn ida 4 iposdeinidos pore usiri ytpos pede ido Sonocer C no es reusioprevioparaspreder Cav, Programar ex €favorese micas series y traces que ls saracteristvas de Inguaje Co¥ han hecho innecesaron Ast, po: 1o fuera an de C+ sempre cjemplo, la conversiGn exalicita de tipos se necesita con menos frecuencia en C++ que en (1.61), Sin embargo, ls buenos programas C tienden a ser programas Cx, Por ejen, Plo, tods los proguumas de Tite C Programming Language (2rd Editon). de Kernighan y Ritchie (Kernighan 1988), son programas C++, La experiencia con cualquier lengusje de tipificacién esttics serd de ayuda para aprender C++, 1.6.1 Sugerencias para programadores de C Cuanto nejor se ccnoce C. mis dificil parece que es no escribir C++ en estilo C, con lo ‘que se perden pare de los bereficios potencies de C++. Ruego al lector que convulte -n Apéndice B las diferencias entre C y C++. Veamos algunas ce las dreas en las que C-+ tiene fornas mejores de hacer algo que C. [1] Lis macros casi nunca son necesarias en C++, Use el lector const ($5.4) 0 enum ($1.8) para definir constantes manifiestas, inline (87.1.1) para evitar los eostes ex ‘ede las lamadas 2 funcién, templates (capitulo 13) para especificar familias de fusciones y tpos, y namespaces ($8.2) para evitar confictos de nombres. (2) Nedeclare el lector una variable hasta que la necesite, de modo que pueda inici 2zaila inmeciaament. Una declaracién puede aparecer en cualquier lugar en cl que purda aparecer una sentencia (§6.3.1),en inicilizadores de la seatencia for ($6.3. ¥y a condiciones (§6.3.21), [31 Nohay que usar maifoc(). El operador new (§6.2.6) hace mejor enlugar de realloc(, se debe intentar un vector ($3.8). 4] Precure el lector evitar void, la aritmetica de punteros, las unions y los moldes (en inglés, cass), excepto em las profundidades de la implementacidr de alguna funcicn © €ase. En la mayoria de los casos un molde es una indieaciGn de error de diseiw Si lector tiene que usar una conversién explicita de tia prucbe a usar uno de lew nuevos melds» ($6.2.7) para un enunciado ms preciso de lo que -ntenta hacer, [5] Hay que reducir al minim el uso de arrays y cadenas de estilo CA menudo se pu der usar tas clases string (§3.5) y vector (§3.7.!) de la biblioteca estandar C++ para simplficar la programacin con respecto al eso traci anal de C. En general, el lector debe tra de no construir Io que ya proporciona la biblioteca estandar Para cum las conenciones de enlazado de programas con C. debe declararse que una funcién C-+ tiene erlace con C ($9.24). ‘Lo mas importants es que el lector trate de concebir el programa como un conjunto de conceptosen interaceién representados como clases y objetos. en lugar de como un ma ‘ojo de esiucturas de datos con funciones que juegan con sus bits m0 trabajo 1.6.2 Sugerencias para programadores de C++ Ea este memento hay muchas personas que llevan ya una década usando C++, Son mu: eas més lis que usar C++ en ua solo entome y han aprendido a convivit con las reste. ciones impuestas por los prineros compiladoces y las bibliotecas de primera generac ‘A menudo o que se I ha escapado en estos afos a un programadcr experimentado de C+ ‘noes la intioduccién de las nuevas caracteristicas com ales sino bos camiox de relaciones lente esas caracteriticas que hacen viables tEenicas nuevas y furcamentues de programe ce dere moda, cosas quel lector wo pens ono encont pricticas cuando si oi Ce prt coms aboraon plane nienosopro, algo qu alos puede sete exe ninando les fundame os del erie ~eetcndo a ecor qn Tea fos capitals prone. Sia conce el contenigo de un capa repaario en unos minson. Si To cone aprender alo con Te qe 00 eee Berm pare, he apend mastaneeibendo ee Hoy sxpeco ge ae contin pogramaorce C+ come tas hs carters y Wench presents ‘ens pr le lege ce alt na eninge pn re osm decometrsca nics Mediate su ogani:aiény sus employ, ese I fre ee oa perpectiva 1.7 Reflexiones sobre la programacién en C++ oe r—==FEEE tinge sone ompresin cara el rob (is), gos deaican es oncep ins ence tne erin eo e,rsCs=*é«*=sCsia(‘iCiéséa eeeietet pour c tenn te none seqnaement Por eva ozone LL sla mayora de las aplicaciones hay concertos que noes fil represent eee hay dara cls paternal eae prgramn. Una ise Coes ip Era epe en timo compo lan objeos desu se bes ean som Se er, ees —— Serunaprescuracon mpurante La dn parweserbbueos progaas es dar ls {Xs de mod que cal tne eels epee con Timea uncle concep. Amen ee —™se err, sre eel pce (parva re eee eee he aie ia meer orang rene aioe, nolura pensar mene biome 9 soley props prac eh ng de empeat Ineo cial pretemas f oo F—r—s—S—SisCSCr—Ss eS ee dores y algunas clases matemiticas forman pert de Ja bibioteca estindar C+ (capitulo es, s—=Cié=S er ep as Ls conceptes no existenen el vacks siempre hay agrupumientos de conceptosrelaco nak ene signa feline laces de an programa ss dec, drm rr Clon "suc sma if que exatecr incatmen la sina canes: E lade tno debe ser un embrotio en el que cada case (concepto) dependa de todis las dem. Con sidenmos dos eases, Ay B. Relaciones como «A llama afunciones de», «A crea B» ‘plantillas (82.7, capitulo 13 Una pantitla de clase espec:fica una familia de chses. Asi, por ejemplo: una plantils de listasespecificaclista de Tx, pudiendo ser «T» cualquier tipo. Asf ates una plant lls v= lun mecanismo para especifiear emo se genera ut tipo, date otro tipo como argument Las plantillas mas frecuentes son clases contenedor coma lista arrays y auras asocictiven, ¥ los dgoritmos findamentales que usan esos contenedores. Habitualmen ees un error ex Presarla parametrizacicn de una clase y sus funciones asociadas con Ua tipo que we la herencia. Se hace mejor con plantllas Recordemos qte gran parte de las tareas de programacisn s+ pueden realizar con sere lez y slaridad usando sélo tips primitives, estructras de dats, funciones simples y unas ‘ewan: clases de biblioteca. No se debe usar todo el aparato que intervisne en la dein i6n : tipos nuevos a menos que sea realmente necesario. {La regunta:«{Cémose excriben buenos progranas en C+?» es muy garecida ala pre- santa: «{Cémo seescribe buena prosa?s. Hay dos ‘espuests: «Sabienld 19 que se qutere decir y «Con la prctica,imitando la buena escrtura». Ambus Jarecea tanapropiadas para (C++ cxmo para laprosa, y no menos dificles de seguir 1.8 Consejos A continuacidn se ofrecen una serie de «reglas» que el lecter suede ‘enes en cuenta pera ‘aprender C++, A medida que gane dominio del lenguaje podré alaptarls para hacerlas mis cin, Son, de manera deliberals, my iadas sus aplicaciones sues de progamaciGn, Sn, i SEoBia pee geno cnt en deat, No hy or tm al ee ata ao wr ynbucn programa hace fata insligencia,gstoy pac encia, No espee el Leto ha ie bien la pritera,expeimente ['} Coardo eestor progama. Solucién de algun probiems. Hay que ‘esas ideas lo mas directamente posible nc cans en [a] 5 pusde pensar en algo como una ide independ ente, convert ese «aly rea una representaciGn concreta de sus ideas para la fue ja estructura del programa refleje {b] No use funciones globales. a 13.1 Referencias ‘Aunxue en el texto hay unas cusntas referenciss irectas, sha reunide aguf una breve re lacidn de libros y otras publicaciones mencionacas, directa o indireetamente 2 Recorrido por C++ Antes de nada, matemos «todos los abogados del lenguaje. Enrique VI. parte Il Qué es C++ — paradigms de programacir — programacidn por procedimic tos — prozramacién modular — compilaciin indepenaiiente — marejo de ex- cepciones — abstracciée de dato: — tipos definidos por el usuario— tipos cca- cretos — tipos abstracios — fusciones virtales — programacién orientada a ‘objetes — programacién genérica — contenedores — algoritmos — lenguaye ¥ programaci6n — consejos 2 Qué es C++ Cot.es un enguaje de programacién Je uso general con un sesgo hacia la programacisn de sistemas que = es un C majorado, = soporta abwtraccin de datos, ~ soporia programacién orientada a objetos y ~ soporta programacién genérica, El presente capitulo explica lo que significa este sin entrar en los detalles més suiles de la definicién de: lenguaje. Su finalidal es ofrecer al lector un panorama general de CH y las ecnicas clave para usalc, no proporcionarle la informacidn detalads necesaria para ‘comenza a progeamar en C++ Sie lector encuentra passes dificiis de seguir debe saltirselos y segur leyenco. Todo ‘se emplca con cetalle en capitulos posteriores. Sn embargo, si omite alguna parte de este capitulo, debe hacerse sf mismo el favor de vo ver sobre ella ms adelante El conocimiento detallado de las saracteristcas del lenguaje —aunque sea de todas cllas~ no compensa la fata de una vision de cenjunto del lenguaje y las téenicas funda ‘mentales para usar. 2.2 Paradigmas de programaciin La proramacié venta ojos esa tcc para prima un pragma pare eri programas sbunosx pre un connto de oblemar 8. a denomnne Se seesace de proramacon eta «objeto ica lpn ha de eeise sun lenae te tramion que popotcons mecansmos que septa tien cl eno de popasaoa oriertada a oben. : " : ve Hay agui una cisincin imponant, Se dice qe un lene soporta un estilo do. tranacion i properiona rectnos qe lagan coed araanenent ch aeeroy sient) sar te elo, Un lenguje no spota una nica! tace alas ees ona habikdd excecinal para ese ale programay; simplemente perme ease dena sGenea AS por empo es posible exc progranas estuouato arsine tna erentaos a chjtos en C.fro es nescaramete ie haces pone no es taj ue sopoen de manera neta ea ties soporte paraun paradigm adopts ro so la-orma ede de recurso del ena {ue prmitan elas det dl paradigm a oma Mss de cone baci en temps de ejecuidn fo en tompo de compilcignparsJeecar desi inntensionada det miso. La cemprobacdn de tiene el ere mis eid tree se trandtecin dea ambigbedad ycomprobacunes en lenge de Scion pon oe Dla soporte linseed on praigngs. ReewwoncxealmUition cone ke Bot tees y los enon de proracin pueden aunetar el spe els parigoas Us inguaj noes necesaramente mer que co pau poscans cans ue «lot 0 tee. Hay mucho ejanpos do Contato La pate ss son ate ese raceisicas qu psen un lengeae, como que ea earaceraat sea sulin fos ‘oporar fos esilosde pogramacondesaos en tes de slic dren U1 Tos as canterstcas eben esti y egos negra eng, (2) abe ser pose usar as eracterscas en mbna ura lop solelone og, caro mow, ein cxraterscas independiente acon (81 Eehe hater an pocas caters expe spar es epeticots como sea posible (41 mpemenacin de ua caractestica no debe pone ose ext imports los prograns que no laces, {5} usuarocebenecestar conocer slo el sabonjumo cel engaje vido exp tamente prs rion programa Bt prime rinaipioss un ama a ei yf pc, Lo os sigue son expe sin dl ideal dt animals, Londo hinos poet resimins ene cones oe Te ques seas no haga dann Che died pre Soporte absrasin de dos proganacin orienta oes » programacin gerétca, adem de cna tadkionales de Coons tevon, Nee Pecens qu inpuea un exo deprogumaccnconereto als isso En os arias siguientes se sudan algunos estore peace e mecens- sno he del lng gue los sopra. Le pesenscin vanes porns eine ens Ae vn Sede pogramacin por roced mento e sods eu ca a Programaion orien ada + ebjetony pograacionpenzrica nel soo de Pasi Cada paradzna se constye soe los le loan prcelda aie algo nscvoal nent de herramenta del propor Cy teks un paneamieno oe dca denuninde La presentac on de las caracteristias del leaguaje no es exhaustiva, Se hace mis hin- cap en los plateamientos de disefioy as formas de organizar los pregramas que en los ‘Gaalfes det lenguaje. En esta etapa esmucho mas importante formarse uns idea de lo que Se puede hacer asando C+ cue comprender exaetamente como se puede lograr 23 Programacién por procedimientos El paradigma original de programaci¢a es: Decidir qué procediniewios se desean; usar [os mejores algpritmos qu? Se pusdan encontrar. El centro de atexcin esté enel procesamiento: e algoriimo necesario pars realizar et cal culo deseado. Las lenguajes soportan este paradigma proporeionando recersos para pasar frgu-nentos las funciones y devolviendo valeres de las furciones. Lo publicado en rela cidn con esta forma de pensamiento et repleto de andlsis sobre formas de pasar Ios at= ‘gumentos, formas de distingur dferertes tipos d> argumentos, diferentes tipos de funcio- res (procedimientos,rutinas y macros), eteétera ‘Un ejemplo pico de «buen estilo» es una funzidn de rafs.cuadrada (sqrt), Dado un ar _gemento en coma flotante de doble pecisi6n, produce un resultado, Paraello, realiza un teflculo matemstico bien conocido. double sqrt double arg) fi MW eédigo para calewlar una ref: cuadrac void f double root y 1 Las laves expresan agrupamento en C++. En exe caso indican el comienzo y el final de los cuerpos de las funciones. La doble bara inclinada abre un comentario que eg hasta elfiral dela linea, La palabra clave vaid indica que una uncién no devaelve ningur valor. Desde el punto de vista de la organizacidn del frograma, las funciones se usan para crear ‘orden en un laberinto de algcritmos. Los propios alzoriimos se escriben tsando Hamada 2 funcidn y ots recursos cel lengnaje Fn los aitapartados siguientes s© presenta una ver- sin reducida de los recursos fundamentales de C++ para expresar cdeules sqrt (2); 23. Variables y aritmética ‘Todos los nombres y todas as expresiones tieren un tipo que determina las operaciones {que se pueden realizar con ellos. Por ejemplo, la declar int inch; specifica que iach es de tipo int; es cecit, inch 2s una variable entera

También podría gustarte