Internet ablakok Android

Az Adventik egy teljes körű szolgáltatást nyújtó digitális ügynökség. A C nyelv története Ci nyelv

A C ++ egy összeállított általános célú programozási nyelv, amely ötvözi a magas és az alacsony szintű programozási nyelvek tulajdonságait. Elődjéhez, a C programozási nyelvhez képest a legtöbb figyelmet az objektumorientált és általános programozás támogatására fordítják. A C ++ programozási nyelv elnevezése a C programozási nyelvből származik, amelyben az unary ++ operátor egy változó növekedését jelöli.

A C ++ programozási nyelvet széles körben használják a szoftverfejlesztéshez. Mégpedig különféle alkalmazási programok létrehozása, operációs rendszerek, eszközillesztők fejlesztése, valamint videojátékok és még sok más. Az 1980 -as évek elején Björn Stroustrup hozta létre. Saját használatra számos fejlesztéssel állt elő a C programozási nyelvben. azok. eredetileg nem tervezték a C ++ programozási nyelv létrehozását.

Támogatja az olyan programozási paradigmákat, mint az eljárási programozás, az objektum-orientált programozás, az általános programozás, biztosítja a modularitást, a külön fordítást, a kivételkezelést, az adatok kivonását, az objektumok típusainak (osztályainak) deklarálását, a virtuális funkciókat.

A kapott nyelvnév a C ++ unary postfix növekmény operátorból származik (a változó értékét eggyel növeljük). A C + nevet nem használták, mert szintaktikai hiba a C -ben, ráadásul a nevet egy másik nyelv vette át. A nyelvet szintén nem nevezték D -nek, mert "ez a C kiterjesztése, és nem próbálja megoldani a problémákat a C elemek eltávolításával".

A nyelv előnyei:

1. Skálázhatóság. A C ++ nyelven a programokat különféle platformokra és rendszerekre fejlesztették ki.

2. Képesség alacsony szinten dolgozni memóriával, címekkel, portokkal.

3. Képesség általánosított algoritmusok létrehozására a különböző típusú adatokhoz, azok specializációjához és sablonok segítségével történő összeállítási számításokhoz.

4. Cross-platform. A fordítók számos platformra elérhetők, a C ++ nyelven a platformok és rendszerek széles skálájára fejlesztenek programokat.

5. Hatékonyság. A nyelvet úgy tervezték, hogy a programozó számára maximális ellenőrzést biztosítson a program végrehajtásának struktúrája és sorrendje tekintetében.

A nyelv hátrányai:

1. A típusbiztonság alapelveit sértő számos funkció jelenléte azt eredményezi, hogy egy finom hiba könnyen bekúszhat a C ++ programokba.

2. A modularitás gyenge támogatása. Ha külső modul interfészt csatlakoztat az előfeldolgozó fejlécfájl beillesztésével (#include), akkor nagymértékben lelassítja a fordítást, ha nagyszámú modult csatlakoztat.

3. A C ++ nyelvet nehéz megtanulni és összeállítani.

4. Néhány típuskonverzió nem intuitív. Különösen az alá nem írt és aláírt számokkal végzett műveletek hoznak aláírás nélküli eredményeket.

5. Egyesek a C ++ nyelv hátrányának tartják a beépített szemétgyűjtő rendszer hiányát. Másrészt a C ++ rendelkezik elegendő eszközzel, hogy szinte kiküszöbölje a veszélyes mutatók használatát; a szemétszedés megvalósításában és használatában nincsenek alapvető problémák (a könyvtárak, nem pedig a nyelv szintjén). A beépített szemétszedés hiánya lehetővé teszi a felhasználó számára, hogy saját erőforrás-kezelési stratégiáját válassza.

C ++ programozási nyelv

Utolsó frissítés: 2017.08.28

A C ++ programozási nyelv egy magas szintű, statikusan beírt, általános célú programozási nyelv, amely sokféle alkalmazás létrehozására alkalmas. Ma a C ++ az egyik legnépszerűbb és legelterjedtebb nyelv.

A C nyelvben gyökerezik, amelyet 1969-1973 között fejlesztett ki a Bell Labs-ban Dennis Ritchie programozó. A nyolcvanas évek elején Bjarne Stroustrup dán programozó, aki akkor a Bell Labs -ban dolgozott, kifejlesztette a C ++ nyelvet a C nyelv kiterjesztéseként. Valójában az elején a C ++ egyszerűen kiegészítette a C nyelvet néhány objektum-orientált programozási lehetőséggel. Így maga Stroustrup kezdetben "C osztályokkal" emlegette.

Ezt követően az új nyelv népszerűvé vált. Új funkciókkal bővült, ami nemcsak a C kiegészítésévé, hanem egy teljesen új programozási nyelvvé tette. Ennek eredményeként a "C osztályokkal" nevet C ++ névre keresztelték. Ettől kezdve a két nyelv egymástól függetlenül fejlődni kezdett.

A C ++ egy erőteljes nyelv, amely gazdag memóriaképességeket örököl C -től. Ezért a C ++ gyakran megtalálja alkalmazását a rendszerprogramozásban, különösen operációs rendszerek, illesztőprogramok, különféle segédprogramok, antivírusok stb. Létrehozásakor. A Windows egyébként többnyire C ++ nyelven íródott. Ennek a nyelvnek a használata azonban nem csak a rendszerprogramozásra korlátozódik. A C ++ bármilyen szintű programokban használható, ahol fontos a sebesség és a teljesítmény. Gyakran használják grafikus alkalmazások, különféle alkalmazási programok létrehozására. Különösen gyakran használják gazdag, gazdag megjelenítésű játékok készítésére. Ráadásul az utóbbi időben a mobilirány is lendületet vesz, ahol a C ++ is megtalálta az alkalmazását. És még a webfejlesztésben is lehetőség van a C ++ használatával webes alkalmazások vagy valamilyen segédszolgáltatások létrehozására, amelyek webes alkalmazásokat szolgálnak ki. Általában a C ++ egy széles körben használt nyelv, amelyen szinte bármilyen programot létrehozhat.

A C ++ egy fordított nyelv, ami azt jelenti, hogy a fordító lefordítja a C ++ forráskódot egy futtatható fájlba, amely gépi utasításokat tartalmaz. De a különböző platformoknak megvannak a sajátosságaik, ezért az összeállított programokat nem lehet egyszerűen átvinni egyik platformról a másikra, és ott futtatni. A forráskód szintjén azonban a C ++ programok többnyire hordozhatóak, kivéve, ha az aktuális operációs rendszerre jellemző funkciókat használnak. És a fordítók, könyvtárak és fejlesztőeszközök jelenléte szinte minden közös platformon lehetővé teszi, hogy ugyanazt a C ++ forráskódot fordítsa össze ezekre a platformokra.

A C-vel ellentétben a C ++ lehetővé teszi az objektum-orientált stílusú alkalmazások írását, amely egy programot kölcsönhatásba lépő osztályok és objektumok gyűjteményeként ábrázol. Ez megkönnyíti a nagy alkalmazások létrehozását.

A fejlődés fő szakaszai

1979-80 -ban Bjarne Stroustrup kifejlesztett egy kiterjesztést a C nyelvre - "C osztályokkal". 1983 -ban a nyelvet C ++ névre keresztelték.

1985 -ben megjelent a C ++ nyelv első kereskedelmi változata, valamint a "The C ++ Programming Language" című könyv első kiadása, amely hivatalos szabvány hiányában bemutatta ennek a nyelvnek az első leírását.

1989 -ben megjelent a C ++ 2.0 nyelv új verziója, amely számos új funkciót tartalmazott. Ezt követően a nyelv viszonylag lassan fejlődött 2011 -ig. De ugyanakkor 1998 -ban az ISO (Nemzetközi Standartizációs Szervezet) megkísérelte a nyelv szabványosítását. Az első szabvány az ISO / IEC 14882: 1998, vagy röviden C ++ 98 nevet kapta. Később, 2003 -ban megjelent a C ++ 03 szabvány új változata.

2011 -ben megjelent az új C ++ 11 szabvány, amely számos kiegészítést tartalmazott, és sok új funkcióval gazdagította a C ++ nyelvet. Ezt követően, 2014 -ben megjelent egy kis kiegészítés a szabványhoz, más néven C ++ 14. A nyelv másik fontos kiadása pedig 2017 -re várható.

Fordítók és fejlesztői környezetek

A C ++ programok fejlesztéséhez fordítóra van szükség - ez lefordítja a C ++ forráskódot egy futtatható fájlba, amelyet aztán futtathat. De jelenleg sokféle fordító létezik. Különböző szempontokban különbözhetnek, különösen a szabványok végrehajtásában. A C ++ fordítóinak alapvető listája megtalálható a Wikipédián. A fejlesztéshez ajánlott azokat a fordítókat választani, amelyek a legújabb szabványokat fejlesztik és valósítják meg. Így ebben az oktatóanyagban elsősorban a GNU Project által fejlesztett ingyenes g ++ fordítót fogjuk használni.

Programok létrehozásához olyan IDE -ket is használhat, mint a Visual Studio, Netbeans, Eclipse, Qt stb.

Mi az oka a C nyelv ilyen állapotának? Történelmileg ez a nyelv elválaszthatatlan a Unix operációs rendszertől, amely most éli újjászületését. A 60-as évek az operációs rendszerek és a magas szintű programozási nyelvek kialakulásának korszaka. Ebben az időszakban az operációs rendszert és a fordítóprogramokat függetlenül fejlesztették ki minden típusú számítógéphez, sőt gyakran saját programozási nyelvüket is (ne feledjük például a PL / I -t). Ugyanakkor az ebből adódó problémák közössége már nyilvánvalóvá vált. Egy univerzális mobil operációs rendszer létrehozására tett kísérlet volt a válasz e közös vonás megvalósítására, és ehhez ugyanolyan univerzális és mobil programozási nyelvre volt szükség. A C ilyen nyelv lett, és a Unix lett az első olyan operációs rendszer, amely szinte teljes egészében magas szintű nyelven íródott.

A Unix -szal való szoros kapcsolat olyan próbatételt adott a C -nek, amilyennek akkoriban nem volt más nyelve. A rendszerprogramozási feladatokat akkoriban az iparág legnagyobb kihívásának tartották. Többnyire annyira gépfüggők voltak, hogy sokan egyáltalán nem gondoltak másként a megoldásukra, mint az assemblerben. A magas szintű nyelveket alkalmazásprogramozásra szánták, és csak nagyon korlátozottan hajtották végre a rendszer működéséhez szükséges funkciókat, és gyakran csak egy bizonyos típusú géphez.

A C nyelvet a kezdetektől fogva úgy hozták létre, hogy rendszerfeladatokat lehetett beleírni. A C alkotói nem a nyelvvégrehajtó absztrakt modelljét dolgozták ki, hanem egyszerűen megvalósították benne azokat a képességeket, amelyekre leginkább szükség volt a rendszerprogramozás gyakorlatában. Ezek voltak mindenekelőtt a memóriával való közvetlen munka eszközei, a strukturális vezérlési struktúrák és a program moduláris szervezése. És valójában semmi más nem szerepelt a nyelvben. Minden más a futásidejű könyvtárba került. Ezért a rosszindulatúak néha strukturált összeszerelőként beszélnek a C nyelvről. De bármit is csevegtek, a megközelítés nagyon sikeresnek bizonyult. Neki köszönhetően új szintet értek el az egyszerűség és a nyelvi képességek arányában.

Van azonban egy másik tényező is, amely meghatározta a nyelv sikerét. Az alkotók nagyon ügyesen osztották fel benne a gépfüggő és független tulajdonságokat. Ennek köszönhetően a legtöbb program univerzálisan írható - teljesítményük nem függ a processzor és a memória architektúrájától. Kevés azonos hardverfüggő kódrészlet lokalizálható külön modulokban. Az előfeldolgozó használatával pedig olyan modulokat hozhat létre, amelyek különböző platformokra összeállítva generálják a megfelelő gépfüggő kódot.

A C nyelv szintaxisa sok vitát váltott ki, a benne használt rövidítések a programot túlzottan olvashatatlanná tehetik. De, ahogy Dijkstra mondta, nem az eszközök hibája, hogy írástudatlanul használják őket. Valójában a C -ben javasolt szintaktikai rövidítések megfelelnek a gyakorlatban leggyakrabban előforduló sztereotip helyzeteknek. Ha a rövidítéseket idiómának tekintik az ilyen helyzetek kifejező és tömör ábrázolásához, akkor ezek előnyei feltétel nélküli és nyilvánvalóak.

Tehát a C univerzális programozási nyelvként jelent meg. De nem maradt e keretek között. A 80 -as évek végére a C nyelv, miután vezető szerepet töltött be a Fortranban, világszerte hatalmas népszerűségre tett szert a programozók körében, és az alkalmazott feladatok széles skálájában kezdték használni. Itt jelentős szerepet játszott a Unix (és így a C) elterjedése az egyetemi környezetben, ahol a programozók új generációját képezték ki.

Mint minden nyelvet, a C -t is fokozatosan fejlesztették, de a legtöbb fejlesztés nem volt radikális jellegű. A legjelentősebb közülük talán a funkciótípusok szigorú specifikációjának bevezetését kell tekinteni, amely jelentősen növelte az intermoduláris kölcsönhatás megbízhatóságát C. -ben. Minden ilyen fejlesztést 1989 -ben rögzítettek az ANSI szabványban, amely még mindig meghatározza a C nyelv.

De ha minden olyan felhőtlen, akkor miért használnak még minden más nyelvet, ami alátámasztja létezésüket? A C nyelv Achilles-sarka az volt, hogy túl alacsonynak bizonyult a 90-es évek napirendjére tűzött feladatokhoz. Ezenkívül ennek a problémának két aspektusa van. Egyrészt túl alacsony szintű eszközöket építettek be a nyelvbe - először is a memória- és címszámítással dolgozik. Nem hiába fáj a processzorok bitmélységének változása sok C program számára. Másrészt a C -ből hiányoznak a magas szintű eszközök - absztrakt adattípusok és objektumok, polimorfizmus, kivételkezelés. Ennek eredményeként a C programokban a feladat végrehajtásának technikája gyakran dominál a tartalmi oldala felett.

Az első kísérletek e hiányosságok kijavítására a nyolcvanas évek elején kezdődtek. Bjarne Stroustrup az AT&T Bell Labs cégnél már ekkor elkezdte fejleszteni a C nyelv kiterjesztését kódnév alatt. A fejlesztési stílus meglehetősen összhangban volt azzal a szellemmel, amelyben a C nyelvet létrehozták - bizonyos funkciókat azért vezettek be, hogy bizonyos emberek és csoportok munkáját kényelmesebbé tegyék. A C ++ nevű új nyelv első kereskedelmi fordítója 1983 -ban jelent meg. Ez egy előfeldolgozó volt, amely lefordította a programot C -kódra, azonban Stroustrup könyvének 1985 -ös megjelenése a nyelv tényleges születésének tekinthető. Ettől a pillanattól kezdve a C ++ világszerte népszerűvé vált.

A C ++ fő újítása az osztálymechanizmus, amely lehetővé teszi új adattípusok meghatározását és használatát. A programozó leírja az osztályobjektum belső ábrázolását és a funkció-metódusok készletét az ábrázolás eléréséhez. A C ++ létrehozásának egyik dédelgetett célja az volt, hogy növelni kívánja a már megírt kód újrafelhasználásának százalékát. Az osztályok fogalma erre öröklési mechanizmust kínált. Az öröklés lehetővé teszi új (származtatott) osztályok létrehozását kiterjesztett ábrázolással és módosított metódusokkal anélkül, hogy befolyásolná az eredeti (alap) osztályok fordított kódját. Ugyanakkor az öröklés biztosítja a polimorfizmus megvalósításának egyik mechanizmusát - az objektumorientált programozás alapkoncepcióját, amely szerint ugyanaz a kód használható a különböző adattípusok azonos típusú feldolgozására. Valójában a polimorfizmus a kódok újrafelhasználásának egyik módja.

Az osztályok bevezetése nem meríti ki a C ++ nyelv minden újítását. Teljes körű strukturált kivételkezelési mechanizmust valósít meg, amelynek hiánya C-ben sokkal nehezebbé tette a megbízható programok írását, a sablonmechanizmus egy kifinomult makrógenerációs mechanizmus, amely mélyen beágyazódik a nyelvbe, és megnyitja a kód újrafelhasználásának másik útját, és még sok más.

Így a nyelv általános fejlesztési iránya a képességeinek kibővítését célozta új magas szintű konstrukciók bevezetésével, miközben a lehető legnagyobb mértékben megőrizte az ANSI C. műveletekkel való teljes kompatibilitást, így a programozó valójában abbahagyta a memóriával és a rendszerrel való közvetlen együttműködést. függő entitások. A nyelv azonban nem tartalmaz olyan mechanizmusokat, amelyek arra kényszerítik a fejlesztőt, hogy megfelelően felépítse a programot, és a szerzők nem adtak ki szisztematikus ajánlásokat a meglehetősen kifinomult konstrukciók használatára vonatkozóan. Nem gondoskodtak a leggyakoribb adatstruktúrákat megvalósító szabványos osztálykönyvtár időben történő létrehozásáról.

Mindez oda vezetett, hogy sok fejlesztő kénytelen volt saját maga felfedezni a nyelvi szemantika labirintusait, és önállóan keresni a sikeresen működő idiómákat. Így például a nyelv fejlődésének első szakaszában az osztálykönyvtárak sok alkotója megpróbált egyetlen osztályhierarchiát felépíteni egy közös alaposztályú objektummal. Ezt az ötletet a Smalltalk-tól, az egyik leghíresebb objektumorientált nyelvtől kölcsönözték. A C ++ nyelvben azonban teljesen életképtelennek bizonyult - a gondosan átgondolt osztálykönyvtári hierarchiák rugalmatlanok voltak, és az osztályok munkája sem volt nyilvánvaló. Ahhoz, hogy az osztálykönyvtárak használhatók legyenek, forrásban kellett szállítani őket.

A sablonosztályok megjelenése teljesen megcáfolta ezt a fejlődési irányt. Csak azokban az esetekben kezdték használni az öröklődést, amikor egy meglévő osztály speciális verziójának előállítására volt szükség. A könyvtárakat külön osztályokból és kicsi, nem kapcsolódó hierarchiákból kezdték alkotni. A kódok újrafelhasználása azonban csökkenni kezdett, mivel a C ++ polimorf módon nem használhat független hierarchiákból származó osztályokat. A sablonok széles körű használata elfogadhatatlan mértékben növeli a fordított kód mennyiségét - ne felejtsük el, hogy a sablonokat makrógenerációs módszerekkel valósítják meg.

A C ++ egyik legsúlyosabb hátránya, amelyet a C szintaxis örököl, az, hogy a fordító hozzáfér az összes használt osztály belső szerkezetének leírásához. Ennek következtében a könyvtári osztály ábrázolásának belső szerkezetének megváltoztatása azt eredményezi, hogy újra kell fordítani az összes olyan programot, ahol ezt a könyvtárat használják. Ez nagymértékben korlátozza a könyvtárfejlesztőket modernizációjuk szempontjából, mert egy új verzió megjelenésekor fenn kell tartaniuk a bináris kompatibilitást az előzővel. Ez a probléma sok szakembert elhiteti azzal, hogy a C ++ nem alkalmas nagy és szuper-nagy projektek futtatására.

És mégis, a felsorolt ​​hiányosságok, sőt a nyelvi szabvány elérhetetlensége ellenére (ez több mint tizenöt éves használat után!), A C ++ továbbra is az egyik legnépszerűbb programozási nyelv. Az erőssége elsősorban a C nyelvvel való szinte teljes kompatibilitás. Ennek köszönhetően a C ++ programozók hozzáférhetnek a C fejlesztésekhez. Ugyanakkor a C ++, még osztályok használata nélkül is , számos olyan fontos kiegészítő funkciót és kényelmi funkciót vezet be a C -hez, amelyeket sokan egyszerűen továbbfejlesztett C -ként használnak.

Ami a C ++ objektummodellt illeti, amíg a programja nem túl nagy (több százezer sor), használhatja. A komponensszoftverek iránti újabb tendencia csak megerősíti a C ++ pozícióját. Az egyes összetevők fejlesztésekor a C ++ hátrányai még nem tűnnek fel, és az összetevők működő rendszerhez való kapcsolása már nem a nyelvi, hanem az operációs rendszer szintjén történik.

Mindezek fényében a C ++ kilátásai nem tűnnek borúsnak. Bár a programozási nyelvek piacán a monopólium nem csillog neki. Talán csak bátran állíthatjuk, hogy ez a nyelv nem fog túlélni egy újabb modernizációt. Nem csoda, hogy amikor megjelent a Java, olyan nagy figyelmet fordítottak rá. A C ++ szintaxisában közel álló, ezért sok programozó számára ismerősnek tűnő nyelv megszabadult a C ++ legszembetűnőbb hiányosságaitól, amelyeket a 70 -es évekből örököltek. Úgy tűnik azonban, hogy a Java nem felel meg egyesek által kijelölt szerepnek.

A C / C ++ nyelveknek a modern programozásban betöltött különleges szerepe szinte értelmetlenné teszi az interneten meghatározott címek megadását, ahol anyagokat találhat róluk. Egyszerűen túl sok ilyen hely van. Ha azonban szeretne többet megtudni a C ++ fejlődéséről, akkor kezdjen egy rövid cikkel http://citforum.syzran.ru/programming/prg96/76.shtml.

Alekszandr Szergejev, [e -mail védett]
Cikk a BYTE magazinból / Oroszország, 2000. március

Annak érdekében, hogy a leírt nyelvek gyakorlatban való egyértelmű használatát bizonyíthassuk, olyan feladatot választottunk, amelyben a normál bemenetből vagy fájlból egész számokat kell megadni, majd csak páratlanokat kell kiadni, és fordítva rendelés. Ez az egyik legegyszerűbb feladat, amelynek megoldásához lényegében tömbökkel, ciklusokkal, elágazással és I / O -val kell dolgozni, és lehetővé teszi az alprogramhívások demonstrálását is. Ugyanakkor látható és könnyen érzékelhető.

Felsorolás 1.C

1 #belefoglalni / * Bemeneti-kimeneti funkciók csatlakoztatása<10; ++N) /* Вводим не более 10 чисел */ 8 if (EOF == scanf ("%d, M+N)) 9 break; /* Если конец файла, прерываем цикл */ 10 11 for (-N; N>= 0; --N) / * Menjen végig a tömbön fordítva * / 12, ha (M [N]% 2) / * sorrendben nyomtatja a páratlanokat * / 13 printf ("% d \ n", M [N]); tizennégy)

  • 3. sor. A C / C ++ programban a program végrehajtása mindig a fő funkcióval kezdődik.
  • 7. és 11. sor. A ciklusfejlécben a kezdeti beállítás, a folytatási feltétel és a ciklusparaméter újraszámításának szabálya pontosvesszővel elválasztva jelenik meg. Tevékenységek ++ és -/- - a C nyelv rövidítései közül a leghíresebb, ami egy változó növekedését és csökkenését jelenti, vagyis eggyel növeli és csökkenti annak értékét.
  • 8. sor. Funkció scanf megadja az első paraméter által meghatározott formátumnak megfelelően azon változók értékeit, amelyek címét a többi paraméter határozza meg. Itt az érték beírásának címét számolócímek segítségével számítják ki a tömb helyének címére M eltolást adunk hozzá N elemeket. Ugyanez a hatás érhető el írással & M [N].
  • 12. sor. Művelet % kiszámítja az osztás fennmaradó részét. Kezelői feltétel ha teljesítettnek tekintendő, ha a kifejezés számértéke nem nulla.
  • 13. sor. Funkció printf- a formátum szerinti nyomtatás ugyanúgy működik scanf, de a címek helyett értékeket adnak át a megjelenítéshez.
1 #belefoglalni 2 3 sablon osztály 4 tömb (5 nyilvános: tömb (T méret = 1): M (új T), N (méret), n (0) () 6 tömb (érvénytelen) (törlés M;) 7 T szám (void) const ( return n;) 8 T operátor (int i) const (return M [i];) 9 void Add (T Data); 10 privát: 11 T * M; // a kiosztott memória címe 12 int N, n; // N - kiosztott; n - használt 13); 14 15 sablon void Array :: Add hozzá (T adatok) 16 (ha (N-n) // Ha az összes allokált 17 (int * P = new T; // space használatos, akkor több mint 18-at foglaljon le az (int i = 0; i) számára A; // Változó méretű egész számok tömbje, míg (1) // Végtelen ciklus 29 (int N; 30 cin >> N; // cin - szabványos bemeneti adatfolyam 31, ha (cin.eof ()) megszakad; // Kilépés a hurok a fájl végére 32 A. Hozzáadás (N); // Add a beírt számot a 33 tömbhöz) 34 az (int N = A.Count () -1; N> = 0; --N) // Loop a 35 tömb, ha (A [N]% 2) 36 cout<, és felszabadítja a memóriát
  • 3-13. Sorok. A sablon osztály deklarálva van Sor paraméterrel T... Ez egy változó méretű tömb, olyan objektumok, mint a T... Természetesen feladatunkban nincs szükség sablonosztály használatára. Szeretnénk azonban bemutatni, hogyan jön létre egy polimorf adatstruktúra a C ++ nyelven, amely bármilyen típusú elemmel működhet.
  • 5. sor. Osztálykonstruktor. Inicializálja az objektum ábrázolását. Például a terepen M a művelet által rendelt memóriablokk címe kerül megadásra új T.
  • 8. sor. Példa egy művelet túlterhelésére. Funkció operátor hívásra kerül, ha szögletes zárójel jelenik meg az osztályobjektum jobb oldalán Sor.
  • 9. sor. Ez a funkció a fő a megvalósításban. Elemeket ad hozzá a tömbhöz, szükség szerint kibővítve azt. Mivel összetettebb, mint a többi, meghatározása az osztályleírásból származik. Az osztály törzsében leírt függvényeket nem hívással, hanem inline helyettesítéssel valósítják meg a C ++ nyelven. Ez felgyorsítja a programot, bár növeli annak méretét.
  • 15-24. Sorok. Funkció meghatározása Tömb :: Hozzáadás (T)(mellesleg ez a teljes neve).
  • 27. sor. Típusú objektumot hozunk létre Sor... Templet Aggau típus szerint paraméterezhető int.

A C ++ (olvasható a C-plus-plus) egy összeállított, statikusan beírt általános célú programozási nyelv, amely bármilyen összetettségű program létrehozására használható.
Ez a nyelv több mint 20 éve a három legnépszerűbb és legkeresettebb programozási nyelv között van. (Ezt a TIOBE honlapján ellenőrizheti).
A nyelv a nyolcvanas évek elején keletkezett, amikor a Bell Labs munkatársa, Björn Stroustrup számos fejlesztéssel rukkol elő a C nyelven, hogy megfeleljen saját igényeinek.

Bjarne Stroustrup - a C ++ nyelv megalkotója

Stroustrup úgy döntött, hogy kiegészíti a C nyelvet a Simula nyelv képességeivel. A C, a UNIX rendszer alapnyelve, amelyen a Bell számítógépek futtak, gyors, sok funkcióban gazdag és hordozható. Stroustrup hozzáadta az osztályokkal és objektumokkal való munka képességét. Ennek eredményeként a gyakorlati modellezési problémák megoldhatónak bizonyultak mind a fejlesztési idő (a Simula-szerű osztályok használatának köszönhetően), mind a számítási idő tekintetében (a C sebességének köszönhetően).
Így beszél erről maga a nyelvfejlesztő:



1998 -ban a szabványügyi bizottság közzétette az első nyelvi szabványt, C ++ 98 néven. A C ++ folyamatosan fejlődik, hogy megfeleljen a modern követelményeknek. Az egyik csoport, amely kifejleszti a C ++ nyelvet, és javaslatokat küld a C ++ szabványügyi bizottságnak, az Boost, amely többek között metaprogramozási funkciók hozzáadásával foglalkozik a nyelv képességeinek javításával. Az utolsó szabvány 2017 -ben jelent meg, és az ún C ++ 17... A következő szabvány nem sokáig tart, és 2020 -ban a vártnak megfelelően jelenik meg.
A C ++ nyelvhez senkinek nincs joga, ez ingyenes. 2016 márciusában Oroszországban létrehozták a WG21 C ++ munkacsoportot. A csoportot azért szervezték, hogy összegyűjtse a C ++ szabványra vonatkozó javaslatokat, elküldje azokat a bizottságnak, és megvédje őket a Nemzetközi Szabványügyi Szervezet közgyűlésein.
A C ++ egy többparadigmás nyelv (a paradigma szóból - a számítógépes programok írásának stílusa), amely a programozási stílusok és technológiák széles skáláját tartalmazza. Gyakran tárgyközpontú nyelvnek nevezik, de szigorúan véve nem az. A munka során a fejlesztő abszolút szabadságot nyer az eszközök kiválasztásában, hogy az egyik vagy másik megközelítéssel megoldott probléma a lehető leghatékonyabban megoldódjon. Más szóval, a C ++ nem kényszeríti a programozót, hogy csak egy programfejlesztési stílushoz ragaszkodjon (például objektum-orientált).
A C ++ gazdag szabványos könyvtárral rendelkezik, amely közös tárolókat és algoritmusokat, I / O -t, reguláris kifejezéseket, többszálas támogatást és egyebeket tartalmaz. A C ++ számos programozási nyelvet befolyásolt, többek között: Java, C #, D. Mivel a C ++ a C nyelv szintaxisa alapján a nyelvek családjába tartozik, könnyen elsajátíthatja a család többi programozási nyelvét : JavaScript, PHP, Perl, Objective-C és még sokan mások ... mások, beleértve magát a szülő nyelvet is - C. ()
Létezése során a C ++ nyelv stabil mítoszokat rögzített, amelyek könnyen megcáfolhatók (lásd itt: 1. és 2. rész)

A nyelv története és a szabványok kiadása

1983

Nyelvkészítő - Bjorn Stroustrup, A Bell Labs munkatársa bemutatta a C ++ egy korai verzióját („C osztályokkal”)

1985

A C ++ első kereskedelmi kiadása, a nyelv felveszi modern nevét

1986

A The C ++ Programming Language első kiadása, egy C ++ könyv, amelyet Björn Stroustrup írt

1998

A C ++ nyelv nemzetközi szabványát megerősítették: ISO / IEC 14882: 1998 "Standard for C ++ Programming Language"

2003
2005

Könyvtári műszaki jelentés 1 (TR1) megjelent. Bár a jelentés hivatalosan nem része a szabványnak, a jelentés a szabványos könyvtár bővítményeit írta le, amelyeket a C ++ nyelv következő verziójában kell szerepeltetni.

2011

Új szabvány - C ++ 11 vagy ISO / IEC 14882: 2011 - kiadása; az új szabvány kiegészítette a nyelv magját, és kiterjesztette a standard könyvtárat, beleértve a TR1 nagy részét

2014

A C ++ 14 szabvány kiadása ("Nemzetközi ISO / IEC 14882: 2014 (E) programozási nyelv C ++"); A C ++ 14 a C ++ 11 feletti kis kiterjesztésnek tekinthető, amely többnyire hibajavításokat és kisebb fejlesztéseket tartalmaz

2017

Új szabvány megjelent - C ++ 1z (C ++ 17). Ez a szabvány számos változtatást és kiegészítést vezetett be. Például az STD tartalmazza a C11 szabvány könyvtárait, a boost :: fájlrendszerre épülő fájlrendszert, a kísérleti TS I könyvtár nagy részét.

2020

A C ++ 20 a C ++ programozási nyelv ISO / IEC szabványának nem hivatalos neve, amely a C ++ 17 után várható. Az N4800 szabvány tervezete.

C ++ filozófia

A C ++ tervezése és fejlődése (2007) című könyvében Björne Stroustrup leírja azokat az elveket, amelyeket a C ++ (rövidítve) tervezése során követett:

  • Szerezzen be egy általános nyelvet statikus adattípusokkal, a C nyelv hatékonyságával és hordozhatóságával.
  • Számos programozási stílus közvetlen és átfogó támogatása.
  • Hagyja a programozónak a választás szabadságát, még akkor is, ha ez lehetőséget ad neki arra, hogy rosszat válasszon.
  • A C -kompatibilitás megőrzése a lehető legnagyobb mértékben, ezáltal lehetővé téve a programozásról a C -re történő egyszerű átmenetet.
  • Kerülje a C és C ++ közötti összetévesztést: minden, mindkét nyelven engedélyezett konstrukciónak mindegyikben ugyanazt kell jelentenie, és ugyanazon program viselkedését kell eredményeznie.
  • Kerülje a platformfüggő vagy nem általános funkciókat.
  • Ne fizessen azért, amit nem használ - egyetlen nyelvi eszköz sem ronthatja az azt nem használó programok teljesítményét.
  • Nem igényel túl bonyolult programozási környezetet.

C és C ++

A C ++ szintaxisa a C nyelvből öröklődik. Bár formailag a C ++ egyik alapelve továbbra is a C nyelvvel való kompatibilitás megőrzése marad, valójában ezeknek a nyelveknek a szabványosítására szolgáló csoportok nem kölcsönhatásba lépnek, és az általuk végrehajtott változtatások nemcsak hogy nem korrelálnak egymással, hanem gyakran alapvetően ellentmondanak egymásnak ideológiailag. Például azok az elemek, amelyeket az új C szabványok hozzáadnak a maghoz, a C ++ szabvány szabványos könyvtárának elemei, és teljesen hiányoznak a magban, például dinamikus tömbök, rögzített határokkal rendelkező tömbök, párhuzamos feldolgozási lehetőségek. Stroustrup szerint nagyon előnyös lenne a két nyelv fejlődésének ötvözése, de ez politikai okokból aligha lehetséges. Így a C és C ++ közötti gyakorlati kompatibilitás fokozatosan megszűnik.
Ebben a példában a használt fordítótól függően vagy „C ++”, vagy „C” kerül kiadásra:

Program 9.1

#befoglalni int main () (printf ("% s \ n", (sizeof ("a") == sizeof (char))? "C ++": "C"); return 0;)

Ez annak köszönhető, hogy a C -ben szereplő karakterállandók int típusúak, a C ++ - ban pedig char típusúak, de ezeknek a típusoknak a mérete eltérő.

Alkalmazás életciklus -modellek

Életciklus A szoftver olyan időszak, amely a szoftvertermék létrehozásának szükségességéről szóló döntés meghozatalának pillanatától kezdődik, és a teljes visszavonulásakor fejeződik be. Ez a ciklus a szoftver (szoftver) felépítésének és fejlesztésének folyamata. Számos életciklus -modell létezik.
Kaszkád modelléletciklus -modellt 1970 -ben javasolta Winston Royce. Ez biztosítja a projekt minden szakaszának egymást követő végrehajtását szigorúan rögzített sorrendben. A következő szakaszra való áttérés az előző szakaszban végzett munka teljes befejezését jelenti. A követelmények kialakításának szakaszában meghatározott követelményeket szigorúan dokumentálják műszaki megbízás formájában, és rögzítik a projektfejlesztés teljes időtartama alatt. Minden szakasz egy teljes dokumentáció kiadásával ér véget, amely elegendő ahhoz, hogy a fejlesztést egy másik fejlesztői csapat folytathassa.
A projekt szakaszai a vízesés modellje szerint:

  1. Követelmények kialakítása;
  2. Tervezés;
  3. Végrehajtás;
  4. Tesztelés;
  5. Végrehajtás;
  6. Üzemeltetés és karbantartás.

A vízesés modellben a projekt egyik szakaszából a másikba való átmenet feltételezi az előző fázis eredményének teljes helyességét. Nagy projektekben ezt szinte lehetetlen elérni. Ezért ez a modell csak egy kis projekt kidolgozására alkalmas. (W. Royce maga nem ragaszkodott ehhez a modellhez, és iteratív modellt használt).
Iteratív modell
A vízesés modell alternatívája a T. Gilb -től a 70 -es években kapott iteratív és inkrementális fejlődés (IID) modell. az evolúciós modell neve. Az IID modell magában foglalja a projekt életciklusának ismétléseinek sorozatát, amelyek mindegyike "mini-projekthez" hasonlít, beleértve az összes fejlesztési folyamatot, amelyet a funkcionalitás kisebb részeinek létrehozásához alkalmaznak a projekt egészéhez képest. Minden iteráció célja a szoftverrendszer működő verziójának megszerzése, amely tartalmazza az összes korábbi és jelenlegi iteráció integrált tartalma által meghatározott funkcionalitást. A végső iteráció eredménye tartalmazza a termék összes szükséges funkcióját. Így minden iteráció befejezésekor a termék növeli - növeli - a képességeit, amelyek ezért evolúciósan fejlődnek.


A legtöbb modern fejlesztési módszert az iteratív megközelítés különböző változatai valósítják meg:

Fejlesztési folyamat - Rational Unified Process (RUP)

Racionális egységes folyamat (RUP)(Rational Unified Process) egy szoftverfejlesztési módszer, amelyet a Rational Software (IBM) támogat. A módszertan ajánlásokat kínál a fejlesztés minden szakaszára: az üzleti modellezéstől a tesztelésig és a kész program üzembe helyezéséig. Modellezési nyelvként az Unified Modeling Language (UML) használható.
A teljes termékfejlesztési életciklus négy fázisból áll, amelyek mindegyike egy vagy több iterációt tartalmaz.

  • Kezdeti szakasz (kezdet)
  • Határozza meg a projekt hatókörét és a szükséges erőforrásokat. Meghatározzák a termék alapvető követelményeit, korlátait és legfontosabb funkcióit. Felmérik a kockázatokat. Akciótervezés. A kezdeti szakasz végén értékelik az életciklus célkitűzés elérését, ami feltételezi az érdekelt felek egyetértését a projekt folytatásáról.

  • Kidolgozás
  • Dokumentációs követelmények. Futtatható architektúra tervezése, megvalósítása és tesztelése. A feltételek és a költségek tisztázása. A jelentős kockázatok csökkentése. A fejlesztési szakasz sikeres befejezése azt jelenti, hogy elérjük az életciklus -architektúra mérföldkőjét.

  • Építkezés
  • A Build fázisban a termék legtöbb funkciója megvalósul: az alkalmazás tervezése kész, a forráskód meg van írva. Az építési fázis a rendszer első külső kiadásával és a kezdeti operatív képesség mérföldkőjével ér véget.

  • Átmenet
  • A "Végrehajtás" szakaszban a termék végleges verziója létrejön, és a fejlesztőtől a megrendelőhöz kerül. Ez magában foglalja a béta tesztelési programot, a felhasználói képzést és a termékminőség meghatározását. Ha a minőség nem felel meg a felhasználók elvárásainak vagy a Start fázisban meghatározott kritériumoknak, a megvalósítási fázis ismétlődik. Minden cél elérése azt jelenti, hogy elérjük a termékkiadás mérföldkőjét és befejezzük a teljes fejlesztési ciklust.



"Információs technológia. Rendszer- és szoftverfejlesztés. Szoftver életciklus -folyamatok ”. Ezt a szabványt az Orosz Föderáció Szövetségi Műszaki Szabályozási és Mérésügyi Ügynöksége fogadta el, és hasonló az ISO / IEC 12207: 2008 nemzetközi szabványhoz. Ez a szabvány általános keretet hoz létre a szoftveréletciklus -folyamatokhoz, amelyeket a szoftveriparban lehet irányítani. A szabvány nem kínál konkrét életciklus -modellt. Ennek rendelkezései közösek a szoftver létrehozására szolgáló életciklus -modellekben, módszerekben és technológiákban. Az életciklus -folyamatok szerkezetét írja le anélkül, hogy megadná, hogyan kell végrehajtani vagy végrehajtani az ezekben a folyamatokban szereplő tevékenységeket és feladatokat.

Lecke bemutatása
Üzenet témák
  • Free Software Foundation (FSF)
  • Ingyenes szoftverlicencek
  • FreeSoftware és nyílt forráskódú
  • A programozási nyelvek fejlődésének története
  • A C. C és C ++ megjelenésének története
  • Történelem
  • C ++ kritika
  • UNIX történelem
  • Spirális szoftver életciklus -modell
  • UML (angol egyesített modellezési nyelv)
  • Microsoft Solutions Framework
  • IDE C / C ++ programozáshoz Windows rendszeren
  • C / C ++ fordítók
  • Konzolos alkalmazás létrehozása Windows rendszeren
Kérdések
  1. Miért nem alkalmazzák a szoftverfejlesztés vízeséses modelljét nagy projektekre?
  2. Mi a különbség a vízesés és az iteratív fejlesztési modellek között?
  3. Sorolja fel a szoftverfejlesztés szakaszait a Rational Unified Process (RUP) módszertanban

Miért C ++

Jelenleg a C ++ nyelvet tekintik a kereskedelmi szoftvertermékek fejlesztésében használt uralkodó nyelvnek. Az elmúlt években ez az erőfölény némileg ingadozott a programozási nyelv, például a Java hasonló állításai miatt, de a közvélemény inga a másik irányba lendült, és sok programozó, aki elhagyta a C ++ for Java -t, a közelmúltban gyorsan visszatért régi vonzalmához. Mindenesetre ez a két nyelv annyira hasonló, hogy az egyik tanulásával automatikusan elsajátítja a másik 90% -át.

A C # egy új nyelv, amelyet a Microsoft fejlesztett ki a hálózati platform számára. Lényegében a C # egyfajta C ++, és számos alapvető különbség ellenére a C # és a C ++ nyelvek körülbelül 90%-ban egybeesnek. Valószínűleg sok időbe telik, mire a C # komoly versenytársa lesz a C ++ -nak; de még ha ez meg is történik, a C ++ nyelv ismerete jelentős előnynek bizonyul.

A C ++ egy általános célú programozási nyelv. Természetes alkalmazási területe a rendszerprogramozás, amelyet a szó széles értelmében értünk. Ezenkívül a C ++ - ot sikeresen alkalmazták az alkalmazás számos olyan területén, amelyek messze túlmutatnak a megadott hatókörön. A C ++ megvalósítások mostantól minden gépen megtalálhatók, a legszerényebb mikroszámítógéptől a legnagyobb szuperszámítógépig, gyakorlatilag minden operációs rendszerig.

A C ++ nyelv megjelenése és fejlődése

Bjarne Stroustrup a C ++ nyelv fejlesztője és az első fordító megalkotója. Tagja az AT&T Bell Laboratories Research Computing Center -nek Murray Hillben, New Jersey -ben, USA -ban. Matematika és számítástechnika szakon szerzett MSc diplomát az Aarus Egyetemen (Dánia), PhD számítástechnikát pedig a Cambridge -i Egyetemen (Anglia). Szakterülete az elosztott rendszerek, operációs rendszerek, modellezés és programozás. M. A. Ellisszel együtt ő a C ++ nyelvre vonatkozó teljes útmutató, A C ++ kézikönyv jegyzetekkel szerzője.

A C ++ természetesen sokat köszönhet a C nyelvnek, amely annak részhalmazaként megmarad. A C-ben rejlő összes alacsony szintű eszköz is megmarad, amelyeket a rendszerprogramozás legsürgetőbb problémáinak megoldására terveztek. A C viszont sokat köszönhet elődjének, a BCPL nyelvnek. A BCPL megjegyzés vissza lett állítva C ++ - ra. Egy másik inspirációs forrás a SIMULA-67 nyelv volt; ebből kölcsönözték az osztályok fogalmát (a származtatott osztályokkal és virtuális függvényekkel együtt). A C ++ azon képessége, hogy túlterheli az operátorokat, és a leírások elhelyezésének szabadsága, bárhol jelenjen is meg, emlékeztet az Algol-68 nyelvre.

A nyelv korábbi verzióit, a "C osztályokkal" elnevezést 1980 óta használják. Ez a nyelv azért merült fel, mert a szerzőnek megszakítás-vezérelt szimulációs programokat kellett írnia. A SIMULA-67 nyelv ideális erre, ha nem veszik figyelembe a hatékonyságot. A C with Classes nyelvet nagy modellezési feladatokhoz használták. Ezután szigorú tesztnek vetették alá a programok írásának lehetőségét, amelyek számára az idő és a memória erőforrásai kritikusak. Ez a nyelv hiányolta a műveletek, hivatkozások, virtuális funkciók és sok más szolgáltatás túlterhelését. A C ++ először túllépett azon a kutatócsoporton, amelyben a szerző 1983 júliusában dolgozott, de ekkor még sok C ++ szolgáltatást nem fejlesztettek ki.

A C ++ nevet (si plusz plusz) Rick Mascitti alkotta 1983 nyarán. Ez a név tükrözi a C nyelvben bekövetkezett változások evolúciós jellegét. A ++ megjelölés a C nagyítási műveletre utal. A C + szintaktikai hiba. Ezenkívül már egy teljesen más nyelv neveként is használták. A C szemantika ismerői úgy találják, hogy a C ++ rosszabb, mint a ++ C. A nyelvet nem nevezték D -nek, mert a C kiterjesztése, és nem próbál megoldani semmilyen problémát a C képességeinek elhagyásának rovására. A C ++ név másik érdekes értelmezése a mellékletben található. .

Kezdetben a C ++-t úgy alkották meg, hogy a szerzőnek és barátainak nem kellett assembly, C vagy más modern magas szintű nyelveken programozniuk. Fő célja, hogy egyszerűsítse és kellemesebbé tegye a programozási folyamatot az egyes programozók számára. Egészen a közelmúltig nem volt papír C ++ fejlesztési terv. A tervezés, a kivitelezés és a dokumentáció párhuzamosan zajlott. Soha nem volt „C ++ projekt” vagy „C ++ fejlesztési bizottság”. Ezért a nyelv fejlődött és fejlődik, hogy leküzdje a felhasználók előtt álló összes problémát. A szerző barátaival és kollégáival folytatott megbeszélései minden problémáról a fejlődés ösztönzőjeként is szolgálnak.

A könyv első kiadása óta a C ++ nyelv jelentős változásokon és finomításokon ment keresztül. Elsősorban a túlterhelés, a kötés és a memóriakezelés egyértelműsítésével foglalkozik. Ezzel párhuzamosan kisebb változtatásokat hajtottak végre a C nyelvvel való kompatibilitás növelése érdekében. Számos általánosítást és jelentős kiterjesztést is bevezettek, mint például: többszörös öröklés, tagfüggvények statikus és const specifikációkkal, védett tagok, típussablonok és speciális helyzetek kezelése. Mindezek a bővítések és fejlesztések arra irányultak, hogy a C ++ nyelv olyan legyen, amelyben könyvtárak hozhatók létre és használhatók. Az összes változást a.

Más kiterjesztések 1985 és 1991 között kerültek bevezetésre (mint például a többszörös öröklés, a statikus tagfüggvények és a tiszta virtuális függvények) inkább a C ++ programozási tapasztalatok általánosítása, mint más nyelvekből.

A nyelv ezen hat év alatt tett kiterjesztései elsősorban a C ++ mint adatkivételi nyelv kifejezőképességének növelésére és általában az objektum-orientált programozásra irányultak, valamint a felhasználó által meghatározott adattípusokkal rendelkező, kiváló minőségű könyvtárak létrehozásának eszközeként különösen.

1987 körül nyilvánvalóvá vált, hogy küszöbön áll a C ++ szabványosítására irányuló munka, és ennek alapját azonnal el kell kezdeni.

Az AT&T Bell Laboratories nagyban hozzájárult ehhez a munkához. Mintegy 20 szervezet mintegy száz képviselője tekintette át és kommentálta az ANSI szabványosítási kézikönyv és a forrásanyag jelenlegi verzióját. C ++. Végül a Hewlett-Packard kezdeményezésére 1989 decemberében megalakult az X3J16 bizottság az ANSI-n belül. Az ANSI (American Standard) C ++ szabványosítási munkája várhatóan része lesz az ISO (Nemzetközi Szabványügyi Szervezet) szabványosítási munkájának.

A C ++ párhuzamosan fejlődött néhány alapvető osztály kifejlődésével.