Introduction au C++Guillaume CharpiatDecember 7, 2006Avant-proposCe cours d’introduction au C++ est, comme son nom l’indique, un coursd’introduction: il ne pretend pas donner une liste exhaustive des possibiliteso ertes par le C++ mais seulement un avant-gout.ˆ D’autres cours/polysdisponibles en ligne sont plus adaptes au perfectionnement des connaissancesen C++.Ce cours est par ailleurs pour l’instant incomplet: la toute n, constituesde chapitres moins indispensables, n’a pas encore ete redigee.Bonne lecture !1 La memoireAvoir une idee du fonctionnement d’un ordinateur aide beaucoup a pro-grammer correctement. C’est un passage oblige pour tous ceux qui desirentcomprendre ce qu’est un pointeur.En simpli ant, un ordinateur peut se resumer a une partie memoire ousont stockees les informations et a son processeur qui se charge de modi erla memoire selon les instructions recues .La programmation est donc l’art de donner des instructions e caces quivont gerer la memoire de fa con optimale, de fa con lisible et pratique, ens’appuyant sur des outils construits par d’autres programmeurs.Dans ce chapitre sont presentees les notions fondamentales de variable,pointeur et reference.guillaume.charpiat arrob@s ens.fr11.1 Variables, adresses et contenusLa memoire de l’ordinateur peut ˆetre vue comme un tres grand espacedecoupe en cases. Pour s’y retrouver, les di erentes cases de cet espaceont ete numerotees, chaque ...
Introduction au C++ Guillaume Charpiat∗ December 7, 2006
Avant-propos Ce cours d’introduction au C++ est, comme son nom l’indique, un cours d’introduction:ilnepr´etendpasdonnerunelisteexhaustivedespossibilit´es offertesparleC++maisseulementunavant-gouˆt.D’autrescours/polys disponiblesenlignesontplusadapte´sauperfectionnementdesconnaissances en C++. Cecoursestparailleurspourl’instantincomplet:latoutefin,constitu´es dechapitresmoinsindispensables,n’apasencore´et´ere´dig´ee. Bonne lecture !
1Lame´moire Avoiruneide´edufonctionnementd’unordinateuraidebeaucoup`apro-grammercorrectement.C’estunpassageoblige´pourtousceuxquid´esirent comprendre ce qu’est un pointeur. Ensimplifiant,unordinateurpeutsere´sumer`aunepartieeriome´mou` sontstocke´eslesinformationseta`sonprocesseurqui se charge de modifier lam´emoireselonlesinstructionsrecues. ¸ La programmation est donc l’art de donner des instructions efficaces qui vontge´rerlam´emoiredefa¸conoptimale,defac¸onlisibleetpratique,en s’appuyant sur des outils construits par d’autres programmeurs. Danscechapitresontpre´sente´eslesnotionsfondamentalesdevariable, pointeuretfee´ercne´r. ∗guillaume.charpiat arrob@s ens.fr
1
1.1 Variables, adresses et contenus Lam´emoiredel’ordinateurpeuteˆtrevuecommeuntr`esgrandespace d´ecoupe´encases.Pours’yretrouver,lesdiff´erentescasesdecetespace on t´ete´num´erote´es,chaquecaseporteainsiuneadresse. Lorsquel’onconnaıˆtl’adressed’unecase,onpeutdemanderd’allercon-sulterlecontenudelacaseenquestion.Onpeute´galementbienentendu modifier le contenu de cette case. Unevariabledansleprogrammerepr´esenteenquelquesorteunecasede lam´emoire.Toutevariableporteunnomquipermetdel’identifierdansle programme,etposs`edeuneadressequide´signelacasequiluiestassoci´ee. Pour regarder lavaleurnorise`a-dest-e,c’iablravenu’dcontenu, il faut donc allerdanslame´moirejusqu’`alacased´esigne´eparl’adressedecettevariable, puislirelecontenudecettecase.Demeˆmepourmodifierlavaleurdela variable. Laquantit´edem´emoirer´eserve´epourunevariable,c’est-`a-direlataille ,asiqu¸td’e´criredanscettecase, delacaseassocie´einelafacondeliree d´ependdutypedecontenuquel’ons’attenda`ytrouver.Eneffetenpratique unecaseestforme´ed’uncertainnombredebitsqui peuvent prendre les valeurs0et1.Ilfautdoncquelorsquel’onacce`dea`cettecaseonconnaisse le nombre debits(c-`a-dlataileledalacese)qteuchsaonl’prernteirete´ correctementcequia´et´ecod´edanscettesuitede0etde1.Parexempleles nombresentierspositifs,lesnombresavecvirgule,lesnombresne´gatifs,les chaˆsdecaract`eres,etc.,sonttousrepr´esent´esaufinalpardes0etdes1, ıne ¸esinformationsn’tpaslamˆeme. maisbiene´videmmentlafacondecoderces Letypedecontenud’unevariable,duquelde´pnd¸ e la facon de stocker la valeur de cette variable, est donc primordial. On l’appelle letypede la variable. Avant d’utiliser une variable il faut lacl´ederareserd’e,cid-a`-tsice´rper queltype Cetteest cette variable.dcl´eatarnioeurdepemrela`tdro’tani r´eserverunecasedanslame´moireayantlesbonnesproprie´t´es(labonne taille)etd’enretenirl’adresse,de´sormaisassoci´eeaunomdelavariable. Parexemple,sil’onsouhaiteutiliserunevariablecense´erepr´esenterun nombre entier, il faut tout d’abord lui donner un nom, disonsx, ainsi que pr´ecisersontype.Letypelepluscourantpourde´signerunnombreentier est le typeinteplunn´ed.DastarrunaseocarodsteselsnUn.iseldeteypst programmeilfaudraainsi´ecrire: int x; avantlatoutepremie`reutilisationdexafin que l’ordinateur sache ce que repr´esentex-tnemomecse`D.c´edutaconpel`a,deeerss’ldarea`xgrace a ˆ `
2
l’ope´rateur“prendrel’adressede”nomme´&. L’adresse dexest ainsi&x. Connaissant l’adressead’une variable, par exemplea = &x, on peut acce´der`asoncontenugraˆcea`l’op´erateur“prendrelecontenude”nomm´e *L.unetnoceesacaledoterm´nue´eaest ainsi*a, ou encore*&x. Donnons un exemple simple. Soientxetydeux entiers, valant respec-tivement 4 et 5. On voudrait connaˆıtre leur somme et l’appelerz. La d´eclarationetl’instructionsuivantes: int x; x = 4; permettentde´entimm´exc-(r´de-d`anecasequeserveruairua creer un er no un contenu de typeint, et d’associer au nomxse)tecaeceterodel´mun puisdeluiaffecterlavaleur4(c-a`-dderemplirlacasenu´ot´e&xavec mer e uncoderepre´sentantlenombre4).Demˆ eme: int y; y = 5; Etenfin,grˆacea`l’ope´rateur+qui est en fait une fonction prenant deux ar-guments(undevantluietl’autrederri`ere)quiretournelasommedesdeux entiers en question: int z; z = x + y; Cettederni`ereinstructionproce`dedelafac¸onsuivante:lirelecontenude la variablexet celui de la variableye´reetpmroiaeremntunautreentiercr, (nommons-lewcontdeuxedessommrs-ep,iunesu)snadquleonelcr´elait copier la valeur dew´eroacasenumc-(ledunetnoceld-a`&w) dans la case nume´ro&z, et enfin effacer la variablew(c´eitilda--`’dsulptstuenucuauqe’ni libe´rerlacasenume´ro&wenas´eumroni’dneufluseccalr,ceqapasuin’&z puisque ce sont deux cases distinctes). L’ordinateurex´ecuteralesinstructionsdansl’ordrequel’onlesluia fournies.Dupointdevueduprogrammeur,d´eclarerxavantyou inverse-mentn’apasd’importance,ilfautjustebienpensera`de´clarerlesvariables avantdeslesutiliser.Lemorceaudeprogrammeci-dessuspeutdonceˆtre ´´ it: reecr int x; int y; int z; x = 4; y = 5; z = x + y; ouencore,indiff´eremmentpourlemˆemeresultat: ´ int z;