UVOD U PROGRAMSKI JEZIK C++
C++ je razvijen krajem 1970-ih i početkom 1980-ih godina od strane Bjarnea Stroustrupa u Bell laboratorijama. Ideja iza razvoja C++ jezika bila je da se unapredi jezik C, koji je u to vreme bio vrlo popularan zbog svoje brzine i efikasnosti, ali nije podržavao napredne koncepte kao što je objektno orijentisano programiranje (OOP).
Razlozi za razvoj C++Glavni cilj Bjarnea Stroustrupa bio je da kombinuje efikasnost jezika C sa povećanom produktivnošću programera kroz podršku za:
Razlozi za razvoj C++Glavni cilj Bjarnea Stroustrupa bio je da kombinuje efikasnost jezika C sa povećanom produktivnošću programera kroz podršku za:
- Objektno orijentisano programiranje: Omogućavanje lakšeg modelovanja složenih sistema pomoću klasa i objekata.
- Apstrakciju: Omogućavanje višeg nivoa apstrakcije uz zadržavanje visokih performansi.
- Ponovnu upotrebu koda: Uvođenjem koncepata poput nasleđivanja i polimorfizma, razvoj aplikacija postao je modularniji i brži.
Primer razlike u sintaksi između C i C++
Evo primera koji ilustruje osnovne sintaksne razlike između C i C++ korišćenjem jednostavnog programa za ispisivanje poruke na konzoli. Primer uključuje korišćenje printf u C-u i cout u C++-u:
Kod u C jeziku:
#include <stdio.h>// Potrebna za printf
int main() {
}
int main() {
printf("Pozdrav iz C jezika!\n");
return 0;}
Kod u C++ jeziku
#include <iostream>// Potrbno zaglavlje za cout naredbu
int main() {
}
int main() {
// Ispisuje poruku na standardni izlaz
std::cout << "Pozdrav iz C++ jezika!" << std::endl;
return 0;std::cout << "Pozdrav iz C++ jezika!" << std::endl;
}
Objašnjenje razlika
- Biblioteke za ispis:
- U C jeziku, funkcija printf se nalazi u biblioteci <stdio.h>.
- U C++ jeziku, objekat cout se nalazi u biblioteci <iostream>.
- Sintaksa ispisa:
- printf koristi formatirane stringove sa specifičnim specifikatorima (%d, %s, itd.).
- cout koristi operatore << za ispis, što omogućava jednostavniji i intuitivniji način ispisa bez potrebe za formatiranim stringovima.
- Dodavanje novog reda:
- U C-u, novi red se dodaje pomoću \n.
- U C++-u, može se koristiti std::endl ili \n
Gde se sve koristi programski jezik C++ danas
Evo gde se sve koristi C++:
1. Razvoj igara:
- C++ je ključan u razvoju igara zbog svoje brzine i efikasnosti. Mnogi popularni grafički motori(engine engl.), kao što su Unreal Engine i Unity (koristi C# ali ima core komponente napisane u C++), koriste C++ za kreiranje visokoperformantnih igara sa složenom grafikom.
2. Sistemski softver:
- Operativni sistemi, Drajveri za hardver i firmware često koriste C++. Primeri uključuju delove Windows operativnog sistema i drajvere za različite hardverske komponente.
3. Aplikacioni softver:
- C++ se koristi za izradu desktop aplikacija koje zahtevaju visoku performansu. Primeri uključuju Adobe Photoshop, Adobe Illustrator i mnoge druge aplikacije za obradu slika i video materijala.
4. Finansijske aplikacije:
- Trgovinske platforme, algoritamsko trgovanje i simulacije tržišta često koriste C++ zbog njegove brzine i efikasnosti. Banke i finansijske institucije koriste C++ za razvoj sistema koji zahtevaju nisku latenciju.
5. Mrežni softver i telekomunikacije:
- Mrežni protokoli, serveri, klijenti i drugi mrežni alati često se razvijaju u C++. Ovo uključuje softver za visoko-performantne mrežne aplikacije, poput web servera i mrežnih servisa.
6. Simulacije i modeliranje:
- C++ je popularan u naučnom računarstvu za simulacije, analize podataka i modeliranje. Ovo uključuje primene u fizici, hemiji, inženjeringu i biologiji.
7. Visoko-performantni računari (HPC):
- C++ se koristi u aplikacijama za superračunare i klastere koji zahtevaju maksimalnu brzinu i efikasnost. Ovo uključuje simulacije u klimatskim istraživanjima, astrofizici, bioinformatici i mnogim drugim oblastima.
8. Razvoj baza podataka:
- C++ se koristi za implementaciju baza podataka i sistema za upravljanje bazama podataka (DBMS). Primeri uključuju MongoDB i MySQL, koji imaju komponente napisane u C++.
9. Embedded sistemi:
- C++ se koristi u razvoju softvera za ugrađene sisteme gde su resursi ograničeni i performanse su ključne. Ovo uključuje razvoj softvera za mikrokontrolere, senzore i različite IoT uređaje.
10. Automobilska industrija:
- Softver za kontrolu vozila, autonomnu vožnju, sistemi zabave i informacija u automobilima često koriste C++ zbog svojih performansi i sposobnosti za rad u stvarnom vremenu.
11. Robotska industrija:
- Robotski kontrolni sistemi, simulacije i softver za upravljanje robotskim rukama često koriste C++. ROS (Robot Operating System), koji je popularan u akademskim i industrijskim krugovima, koristi C++ za svoje ključne komponente.
12. Veštačka inteligencija i mašinsko učenje:
- C++ se koristi za razvoj okvira i biblioteka za mašinsko učenje i veštačku inteligenciju. TensorFlow, jedan od najpopularnijih okvira za duboko učenje, ima delove napisane u C++ zbog performansi.
C++ ostaje relevantan zbog svoje moći i fleksibilnosti, omogućavajući programerima da pišu efikasan, brz i pouzdan softver u širokom spektru primena.
1. Razvoj igara:
- C++ je ključan u razvoju igara zbog svoje brzine i efikasnosti. Mnogi popularni grafički motori(engine engl.), kao što su Unreal Engine i Unity (koristi C# ali ima core komponente napisane u C++), koriste C++ za kreiranje visokoperformantnih igara sa složenom grafikom.
2. Sistemski softver:
- Operativni sistemi, Drajveri za hardver i firmware često koriste C++. Primeri uključuju delove Windows operativnog sistema i drajvere za različite hardverske komponente.
3. Aplikacioni softver:
- C++ se koristi za izradu desktop aplikacija koje zahtevaju visoku performansu. Primeri uključuju Adobe Photoshop, Adobe Illustrator i mnoge druge aplikacije za obradu slika i video materijala.
4. Finansijske aplikacije:
- Trgovinske platforme, algoritamsko trgovanje i simulacije tržišta često koriste C++ zbog njegove brzine i efikasnosti. Banke i finansijske institucije koriste C++ za razvoj sistema koji zahtevaju nisku latenciju.
5. Mrežni softver i telekomunikacije:
- Mrežni protokoli, serveri, klijenti i drugi mrežni alati često se razvijaju u C++. Ovo uključuje softver za visoko-performantne mrežne aplikacije, poput web servera i mrežnih servisa.
6. Simulacije i modeliranje:
- C++ je popularan u naučnom računarstvu za simulacije, analize podataka i modeliranje. Ovo uključuje primene u fizici, hemiji, inženjeringu i biologiji.
7. Visoko-performantni računari (HPC):
- C++ se koristi u aplikacijama za superračunare i klastere koji zahtevaju maksimalnu brzinu i efikasnost. Ovo uključuje simulacije u klimatskim istraživanjima, astrofizici, bioinformatici i mnogim drugim oblastima.
8. Razvoj baza podataka:
- C++ se koristi za implementaciju baza podataka i sistema za upravljanje bazama podataka (DBMS). Primeri uključuju MongoDB i MySQL, koji imaju komponente napisane u C++.
9. Embedded sistemi:
- C++ se koristi u razvoju softvera za ugrađene sisteme gde su resursi ograničeni i performanse su ključne. Ovo uključuje razvoj softvera za mikrokontrolere, senzore i različite IoT uređaje.
10. Automobilska industrija:
- Softver za kontrolu vozila, autonomnu vožnju, sistemi zabave i informacija u automobilima često koriste C++ zbog svojih performansi i sposobnosti za rad u stvarnom vremenu.
11. Robotska industrija:
- Robotski kontrolni sistemi, simulacije i softver za upravljanje robotskim rukama često koriste C++. ROS (Robot Operating System), koji je popularan u akademskim i industrijskim krugovima, koristi C++ za svoje ključne komponente.
12. Veštačka inteligencija i mašinsko učenje:
- C++ se koristi za razvoj okvira i biblioteka za mašinsko učenje i veštačku inteligenciju. TensorFlow, jedan od najpopularnijih okvira za duboko učenje, ima delove napisane u C++ zbog performansi.
C++ ostaje relevantan zbog svoje moći i fleksibilnosti, omogućavajući programerima da pišu efikasan, brz i pouzdan softver u širokom spektru primena.
Razvojni alati koji se koriste za razvoj aplikacija u C++
Za razvoj C++ softvera koristi se širok spektar razvojnih alata i okruženja. Evo nekoliko najpopularnijih:
Integrisana razvojna okruženja (IDEs)
1. Visual Studio
- Platforma: Windows
- Opis: Microsoft Visual Studio je jedno od najmoćnijih i najpopularnijih razvojnih okruženja za C++. Pruža bogate funkcionalnosti kao što su napredni debager, alatke za profilisanje, integrisani kompajleri i podrška za različite dodatke (plugins).
2. CLion
- Platforma: Windows, macOS, Linux
- Opis: CLion je razvojno okruženje kompanije JetBrains koje pruža podršku za C i C++ programe. Nudi pametnu kodnu asistenciju, refaktorisanje koda, napredni debager i integraciju sa alatkama kao što su CMake, Gradle i mnoge druge.
3. Code::Blocks
- Platforma: Windows, macOS, Linux
- Opis: Code::Blocks je besplatno i otvoreno razvojno okruženje koje podržava više kompajlera i pruža modularnost putem dodataka. Idealno je za početnike zbog jednostavnog interfejsa.
4. Eclipse CDT
- Platforma: Windows, macOS, Linux
- Opis: Eclipse CDT (C/C++ Development Tooling) je dodatak za Eclipse IDE koji omogućava razvoj C/C++ aplikacija. Podržava različite kompajlere i alate za debagovanje.
5. Xcode
- Platforma: macOS
- Opis: Xcode je razvojno okruženje koje pruža Apple za razvoj softvera za macOS i iOS. Ima ugrađenu podršku za C, C++ i Objective-C.
Kompajleri
1. GCC (GNU Compiler Collection)
- Platforma: Windows, macOS, Linux
- Opis: GCC je jedan od najpopularnijih kompajlera za C i C++ jezike. Dostupan je na većini Unix-like sistema i podržava širok spektar platformi i arhitektura.
2. Clang
- Platforma: Windows, macOS, Linux
- Opis: Clang je kompajler baziran na LLVM projektu. Poznat je po brzim vremenima kompilacije i detaljnim dijagnostikama grešaka.
3. Microsoft Visual C++ (MSVC)
- Platforma: Windows
- Opis: MSVC je deo Microsoft Visual Studio razvojne platforme. Pruža moćne alate za razvoj Windows aplikacija i ima izvrsnu integraciju sa Visual Studio okruženjem.
Alati za izgradnju (Build Tools)
1. CMake
- Opis: CMake je alat za upravljanje izgradnjom softvera koji generiše build fajlove za različite kompajlere i razvojna okruženja. Široko se koristi zbog svoje fleksibilnosti i podrške za multiplatformski razvoj.
2. Make
- Opis: Make je tradicionalni alat za izgradnju na Unix-like sistemima. Koristi Makefile datoteke za upravljanje kompilacijom koda.
3. Ninja
- Opis: Ninja je alat za izgradnju koji je dizajniran da bude brži od Make-a. Često se koristi zajedno sa CMake-om za brže procese kompilacije.
Alati za kontrolu verzija
1. Git
- Opis: Git je distribuirani sistem za kontrolu verzija koji omogućava efikasno upravljanje izvorom koda. GitHub, GitLab i Bitbucket su popularne platforme koje koriste Git.
2. SVN (Apache Subversion)
- Opis: SVN je sistem za kontrolu verzija koji se koristi u mnogim legacy projektima. Nudi centralizovano upravljanje verzijama.
Alati za debagovanje i profilisanje
1. GDB (GNU Debugger)
- Opis: GDB je moćan alat za debagovanje koji podržava C i C++. Koristi se za ispravljanje grešaka, analizu koda i ispitivanje performansi.
2. Valgrind
- Opis: Valgrind je alat za profilisanje i debagovanje koji pomaže u pronalaženju problema sa memorijom i performansama u C i C++ programima.
3. Visual Studio Profiler
- Opis: Alat za profilisanje performansi koji je deo Visual Studio okruženja. Pruža detaljne informacije o vremenu izvršavanja i korišćenju resursa.
Biblioteke i Frameworks
1. Boost
- Opis: Boost je kolekcija slobodnih, peer-reviewed biblioteka koje proširuju funkcionalnosti C++ standardne biblioteke.
2. Qt
- Opis: Qt je framework za razvoj grafičkih korisničkih interfejsa (GUI) koji je široko korišćen za razvoj multiplatformskih aplikacija.
Ovo su samo neki od alata i okruženja koje možete koristiti za razvoj C++ softvera. Izbor alata zavisi od specifičnih zahteva vašeg projekta i ličnih preferencija.
Integrisana razvojna okruženja (IDEs)
1. Visual Studio
- Platforma: Windows
- Opis: Microsoft Visual Studio je jedno od najmoćnijih i najpopularnijih razvojnih okruženja za C++. Pruža bogate funkcionalnosti kao što su napredni debager, alatke za profilisanje, integrisani kompajleri i podrška za različite dodatke (plugins).
2. CLion
- Platforma: Windows, macOS, Linux
- Opis: CLion je razvojno okruženje kompanije JetBrains koje pruža podršku za C i C++ programe. Nudi pametnu kodnu asistenciju, refaktorisanje koda, napredni debager i integraciju sa alatkama kao što su CMake, Gradle i mnoge druge.
3. Code::Blocks
- Platforma: Windows, macOS, Linux
- Opis: Code::Blocks je besplatno i otvoreno razvojno okruženje koje podržava više kompajlera i pruža modularnost putem dodataka. Idealno je za početnike zbog jednostavnog interfejsa.
4. Eclipse CDT
- Platforma: Windows, macOS, Linux
- Opis: Eclipse CDT (C/C++ Development Tooling) je dodatak za Eclipse IDE koji omogućava razvoj C/C++ aplikacija. Podržava različite kompajlere i alate za debagovanje.
5. Xcode
- Platforma: macOS
- Opis: Xcode je razvojno okruženje koje pruža Apple za razvoj softvera za macOS i iOS. Ima ugrađenu podršku za C, C++ i Objective-C.
Kompajleri
1. GCC (GNU Compiler Collection)
- Platforma: Windows, macOS, Linux
- Opis: GCC je jedan od najpopularnijih kompajlera za C i C++ jezike. Dostupan je na većini Unix-like sistema i podržava širok spektar platformi i arhitektura.
2. Clang
- Platforma: Windows, macOS, Linux
- Opis: Clang je kompajler baziran na LLVM projektu. Poznat je po brzim vremenima kompilacije i detaljnim dijagnostikama grešaka.
3. Microsoft Visual C++ (MSVC)
- Platforma: Windows
- Opis: MSVC je deo Microsoft Visual Studio razvojne platforme. Pruža moćne alate za razvoj Windows aplikacija i ima izvrsnu integraciju sa Visual Studio okruženjem.
Alati za izgradnju (Build Tools)
1. CMake
- Opis: CMake je alat za upravljanje izgradnjom softvera koji generiše build fajlove za različite kompajlere i razvojna okruženja. Široko se koristi zbog svoje fleksibilnosti i podrške za multiplatformski razvoj.
2. Make
- Opis: Make je tradicionalni alat za izgradnju na Unix-like sistemima. Koristi Makefile datoteke za upravljanje kompilacijom koda.
3. Ninja
- Opis: Ninja je alat za izgradnju koji je dizajniran da bude brži od Make-a. Često se koristi zajedno sa CMake-om za brže procese kompilacije.
Alati za kontrolu verzija
1. Git
- Opis: Git je distribuirani sistem za kontrolu verzija koji omogućava efikasno upravljanje izvorom koda. GitHub, GitLab i Bitbucket su popularne platforme koje koriste Git.
2. SVN (Apache Subversion)
- Opis: SVN je sistem za kontrolu verzija koji se koristi u mnogim legacy projektima. Nudi centralizovano upravljanje verzijama.
Alati za debagovanje i profilisanje
1. GDB (GNU Debugger)
- Opis: GDB je moćan alat za debagovanje koji podržava C i C++. Koristi se za ispravljanje grešaka, analizu koda i ispitivanje performansi.
2. Valgrind
- Opis: Valgrind je alat za profilisanje i debagovanje koji pomaže u pronalaženju problema sa memorijom i performansama u C i C++ programima.
3. Visual Studio Profiler
- Opis: Alat za profilisanje performansi koji je deo Visual Studio okruženja. Pruža detaljne informacije o vremenu izvršavanja i korišćenju resursa.
Biblioteke i Frameworks
1. Boost
- Opis: Boost je kolekcija slobodnih, peer-reviewed biblioteka koje proširuju funkcionalnosti C++ standardne biblioteke.
2. Qt
- Opis: Qt je framework za razvoj grafičkih korisničkih interfejsa (GUI) koji je široko korišćen za razvoj multiplatformskih aplikacija.
Ovo su samo neki od alata i okruženja koje možete koristiti za razvoj C++ softvera. Izbor alata zavisi od specifičnih zahteva vašeg projekta i ličnih preferencija.
Primer koda u CodeBlock-u je prikazan na slici 1:
O ovom tutorijalu
U ovom tutorijalu biće objašnjeni osnove potrebne za kreiranje kako jednostavnih, tako i takmičarskih zadataka uz upotrebu najpopularnijih algoritama: npr. sortiranje nizova, binarna pretraga, Euklidov algoritam itd.
U tutorijalu će biti objašnjeni i brojni primeri kreirani kako u C, tako i u C++ varijanti pisanja koda. Kao razvojno okruženje biće korišćen CodeBlock.
S obzirom da je svaki C program takođe i C++ program, dok obrnuto ne važi tj. svaki C++ program nije i C program, većina rešenja će biti rešena upotrebom C++ varijante u CodeBlock-u.
U tutorijalu će biti objašnjeni i brojni primeri kreirani kako u C, tako i u C++ varijanti pisanja koda. Kao razvojno okruženje biće korišćen CodeBlock.
S obzirom da je svaki C program takođe i C++ program, dok obrnuto ne važi tj. svaki C++ program nije i C program, većina rešenja će biti rešena upotrebom C++ varijante u CodeBlock-u.
Šta je potrebno da bi se kreirao jedan C ili C++ program?
Pored operativnog sistema, da bi se mogla razvijati jedan C, kao i C++ aplikacija potrebno je:
Razvojni alat za programiranje(opciono), kao npr: dec c++, CodeBlock, VS Code i sl.
Za potrebe ovog tutorijala koristiće se CodeBlock, koji se može preuzeti sa websajta: https://www.codeblocks.org/downloads/
- Koristiti neki tekst editor za pisanje izvornog koda aplikacije. To može biti notepad, notepad++ ili neki drugi, ili editor koji je u sastavu razvojnog alata, ako se isti koristi.
- Instalirati odgovarajući kompajler. Najčešće je to GNU C/C++ kompajler. Na windows OS je potrebno instalirati MinGW (www.mingw.org), koji u sebi ima pomenuti kompajler, dok na Linux OS pomenuti kompajler može da se instalira komandom: $ g++ -v.
- Kompajler izvornu verziju koda, napisanu u nekom tekst editoru ili editoru nekog razvojnog okruženja (CodeBlock-a npr) pretvara u izvršnu verziju koda.
Izvršna verzija se može napraviti i bez instaliranja kompajlera na lokalni kompjuter, tako što bi se koristila online verzija kompajlera: https://www.onlinegdb.com/online_c++_compiler.
Razvojni alat za programiranje(opciono), kao npr: dec c++, CodeBlock, VS Code i sl.
Za potrebe ovog tutorijala koristiće se CodeBlock, koji se može preuzeti sa websajta: https://www.codeblocks.org/downloads/
Razlike u odnosu na C
C++ zadržava gotovo svu sintaksu jezika C, ali se razlikuje po sledećim ključnim aspektima:
- Objektno orijentisano programiranje: Za razliku od C-a, koji je proceduralan, C++ omogućava rad sa klasama i objektima, što olakšava razvoj velikih sistema.
- Standardna biblioteka (STL): C++ dolazi sa ugrađenim kontejnerima, algoritmima i iteratorima, koji omogućavaju lakše rukovanje podacima.
- Podrška za višestruko nasleđivanje i polimorfizam: C++ omogućava kreiranje kompleksnijih hijerarhija klasa.
- Šira sintaktička fleksibilnost: Dodavanje funkcionalnosti poput funkcija sa preopterećenjem (overloading), operatora i šablona (templates).
Ključne karakteristike programskog jezika C++
C++ je jedan od najmoćnijih i najfleksibilnijih programskih jezika. Njegove ključne karakteristike omogućavaju rad u različitim paradigmama programiranja, visok nivo performansi i lakoću razvoja kompleksnih aplikacija.
1. Objektno orijentisano programiranje (OOP)C++ je među prvim jezicima koji su uveli podršku za objektno orijentisano programiranje. Ovo omogućava:
1. Objektno orijentisano programiranje (OOP)C++ je među prvim jezicima koji su uveli podršku za objektno orijentisano programiranje. Ovo omogućava:
- Rad sa klasama i objektima: Organizacija koda oko stvarnih entiteta (klasa) koji imaju svojstva (atribute) i ponašanja (metode).
- Nasleđivanje: Omogućava kreiranje novih klasa koje nasleđuju atribute i metode postojećih klasa, čime se olakšava ponovna upotreba koda.
- Polimorfizam: Dozvoljava različitim klasama da koriste iste metode na različite načine, što pojednostavljuje rad sa apstraktnim interfejsima.
- Enkapsulacija: Svojstva i metode klase mogu biti zaštićeni od direktnog pristupa, čime se povećava bezbednost koda.
- Proceduralno programiranje: Omogućava korišćenje klasičnih funkcija i kontrola toka.
- Objektno orijentisano programiranje: Fokus na klase i objekte.
- Generičko programiranje: Uz pomoć šablona (templates), omogućava rad sa generičkim tipovima, što smanjuje dupliranje koda i povećava fleksibilnost.
- Funkcionalno programiranje: Uvođenjem lambda izraza i funkcija višeg reda, C++ podržava stil programiranja koji se fokusira na nepromenljive strukture i deklarativni pristup.
- Kontejnere: Strukture podataka kao što su liste, vektori, mape i setovi, koje olakšavaju upravljanje podacima.
- Algoritme: Predefinisane funkcije za pretragu, sortiranje, manipulaciju i druge operacije nad podacima.
- Iteratore: Objekti koji omogućavaju prolazak kroz elemente kontejnera, slično pokazivačima, ali sa dodatnom fleksibilnošću.
- Pametne pokazivače: Mehanizmi za automatsko upravljanje memorijom, čime se smanjuje rizik od curenja memorije (memory leaks).
- Operativnih sistema
- Ugrađenih sistema
- Softvera u realnom vremenu
- Preopterećenje operatora i funkcija: Omogućava definisanje različitih ponašanja za iste operatore ili funkcije.
- Šabloni (Templates): Podrška za generičko programiranje omogućava razvoj fleksibilnih i ponovo upotrebljivih komponenti.
- Podrška za konkurentnost: C++ ima ugrađenu podršku za više niti (multithreading), što olakšava razvoj paralelnih aplikacija.
C vs. C++. Prednosti i mane
C programski jezik
Prednosti
1. Jednostavnost:
- C je jezik niskog nivoa koji je lakši za učenje i korišćenje zbog svoje jednostavne sintakse i manjeg broja funkcionalnosti.
2. Efikasnost:
- Programi napisani u C imaju visok stepen performansi i efikasnosti jer omogućavaju direktan pristup memoriji i hardveru.
3. Portabilnost:
- C je veoma portabilan jezik i može se koristiti na gotovo svim platformama sa minimalnim promenama u kodu.
4. Široka upotreba:
- C je osnova mnogih drugih programskih jezika, što olakšava učenje tih jezika. Mnogi sistemi i aplikacije su napisani u C, uključujući operativne sisteme i embedded sisteme.
Mane
1. Ograničena podrška za objektno orijentisano programiranje:
- C nema nativnu podršku za objektno orijentisano programiranje (OOP), što može otežati organizaciju i održavanje većih projekata.
2. Manjak apstrakcije:
- Programeri u C moraju da upravljaju memorijom ručno, što povećava rizik od grešaka kao što su curenja memorije i buffer overflow.
3. Nedostatak standardne biblioteke za moderne funkcionalnosti:
- C ima relativno ograničenu standardnu biblioteku u poređenju sa savremenijim jezicima, što može zahtevati pisanje više koda za implementaciju određenih funkcionalnosti.
C++ programski jezik
Prednosti
1. Podrška za objektno orijentisano programiranje (OOP):
- C++ dodaje podršku za klase, nasleđivanje, polimorfizam i enkapsulaciju, što omogućava bolju organizaciju i modularnost koda.
2. Standardna biblioteka (STL):
- C++ dolazi sa bogatom standardnom bibliotekom koja uključuje kontejnere, algoritme i funkcionalnosti za rad sa stringovima, što značajno ubrzava razvoj softvera.
3. Podrška za više paradigmi:
- Pored OOP, C++ podržava proceduralno, funkcionalno i generičko programiranje, pružajući veću fleksibilnost u razvoju softvera.
4. RAII (Resource Acquisition Is Initialization):
- C++ koristi RAII idiom za upravljanje resursima, što olakšava pravilno upravljanje memorijom i drugim resursima.
Mane
1. Kompleksnost:
- C++ je složeniji jezik u poređenju sa C zbog dodatnih funkcionalnosti i mogućnosti, što može otežati učenje i upotrebu.
2. Veći kompajlacioni zahtevi:
- Programi napisani u C++ često zahtevaju više vremena za kompilaciju zbog složenih funkcionalnosti i bogate standardne biblioteke.
3. Potencijal za složenije greške:
- S obzirom na to da C++ pruža mnoge moćne alate, neadekvatno korišćenje tih alata može dovesti do složenih grešaka koje su teže za otkrivanje i ispravljanje.
Zaključak
- C je idealan za sisteme i aplikacije koje zahtevaju direktan pristup hardveru i maksimalnu efikasnost, kao što su operativni sistemi, embedded sistemi i vozači hardvera.
- C++ je pogodan za složenije aplikacije koje zahtevaju bolju organizaciju koda i fleksibilnost, kao što su grafičke aplikacije, razvoj igara, softver za finansijske sisteme i druge aplikacije koje mogu iskoristiti objektno orijentisano programiranje i bogatu standardnu biblioteku.
Izbor između C i C++ zavisi od specifičnih zahteva projekta i preferencija programera.
Evaluacija programskog jezika C++
C++ je prvobitno nazvan "C sa klasama" (engl. C with Classes), jer su klase bile glavna inovacija u odnosu na jezik C. Prva verzija jezika pojavila se 1983. godine, a formalno ime C++ simbolizuje inkrementalnu nadogradnju jezika C (operator "++" u C-u označava povećanje vrednosti).
Od tada, C++ je prošao kroz mnoge faze razvoja, uključujući:
Od tada, C++ je prošao kroz mnoge faze razvoja, uključujući:
- C++98 (1998): Prva standardizacija jezika, sa fokusom na stabilnost i dodavanje standardne biblioteke (Standard Template Library - STL).
- C++11 (2011): Uvođenje brojnih modernih funkcionalnosti kao što su lambda izrazi, pametni pokazivači (smart pointers), automatsko otkrivanje tipa (auto) i unapređenja u upravljanju resursima.
- C++14 (2014) i C++17 (2017): Dalja unapređenja u performansama i jednostavnosti, kao što su uvođenje opcionalnih tipova i proširenja za constexpr funkcije.
- C++20 (2020): Dodavanje koncepta modula, korutina (coroutines) i podrške za concepts, što dodatno pojednostavljuje generičko programiranje.
Primeri koji ilustruju ključne funkcionalnosti različitih verzija C++ standarda
Kod u C++98: Korišćenje standardnih biblioteka (STL) - std::vector
#include <iostream>
#include <vector>
int main() {
}
#include <vector>
int main() {
// Kreiranje vektora celih brojeva
std::vector<int> brojevi;
// Dodavanje elemenata u vektor
brojevi.push_back(1);
brojevi.push_back(2);
brojevi.push_back(3);
// Ispis elemenata vektora
std::cout << "Vektor sadrži: ";
for (size_t i = 0; i < brojevi.size(); ++i) {
return 0;std::vector<int> brojevi;
// Dodavanje elemenata u vektor
brojevi.push_back(1);
brojevi.push_back(2);
brojevi.push_back(3);
// Ispis elemenata vektora
std::cout << "Vektor sadrži: ";
for (size_t i = 0; i < brojevi.size(); ++i) {
std::cout << brojevi[i] << " ";
}}
Više o vektorima u C++ : Dinamički niz-vector
Kod u C++11: Lambda izrazi
#include <iostream>
#include <algorithm>
#include <vector>
int main() {
}
#include <algorithm>
#include <vector>
int main() {
// Kreiranje vektora celih brojeva
std::vector<int> brojevi = {1, 2, 3, 4, 5};
// Korišćenje lambda izraza za sumiranje elemenata
int suma = 0;
std::for_each(brojevi.begin(), brojevi.end(), [&suma](int n) {
// Ispis rezultata
std::cout << "Suma elemenata: " << suma << std::endl;
return 0;std::vector<int> brojevi = {1, 2, 3, 4, 5};
// Korišćenje lambda izraza za sumiranje elemenata
int suma = 0;
std::for_each(brojevi.begin(), brojevi.end(), [&suma](int n) {
suma += n;
});// Ispis rezultata
std::cout << "Suma elemenata: " << suma << std::endl;
}
Dodatna objašnjenja za C++11 i lambda izraze
Kod:
std::for_each(brojevi.begin(), brojevi.end(), [&suma](int n) {
suma += n;
});
std::for_each(brojevi.begin(), brojevi.end(), [&suma](int n) {
suma += n;
});
Objašnjenje:
- std::for_each funkcija:
Ovo je funkcija iz biblioteke <algorithm> koja prolazi kroz svaki element u datom opsegu. U ovom primeru, opseg je od brojevi.begin() do brojevi.end(). - Lambda izraz:
Lambda izrazi su anonimne funkcije koje se mogu definisati i koristiti u mestu gde su potrebne. U sintaksi:
[&suma](int n) {
suma += n;
}
suma += n;
}
Zašto lambda?
- [&suma]: Ovo je deo za hvatanje promenljivih iz okruženja. Znak & označava hvatanje po referenci, što znači da lambda ima pristup promenljivoj suma direktno i može da menja njenu vrednost.
- (int n): Ovo je lista parametara lambde, ovde funkcija prima jedan parametar n tipa int, koji predstavlja element vektora.
- suma += n;: Tijelo lambde sabira trenutnu vrednost n na suma.
Zašto lambda?
- Lambda izrazi omogućavaju da funkcije budu napisane "u hodu," bez potrebe za definisanjem posebne funkcije.
- Ovde, lambda se koristi da se suma svih elemenata vektora izračuna direktno, bez dodatne funkcije.
Kod u C++17: std::optional
#include <iostream>
#include <optional>
std::optional<int> podeli(int a, int b) {
int main() {
}
#include <optional>
std::optional<int> podeli(int a, int b) {
// Provera da li je deljenje moguće
if (b == 0) {
return a / b;
}if (b == 0) {
return std::nullopt;
}return a / b;
int main() {
// Poziv funkcije za deljenje
auto rezultat = podeli(10, 2);
// Provera rezultata
if (rezultat) {
return 0;auto rezultat = podeli(10, 2);
// Provera rezultata
if (rezultat) {
std::cout << "Rezultat: " << *rezultat << std::endl;
} else {
std::cout << "Deljenje nije moguće." << std::endl;
}}
Dodatna objašnjenja za C++17 i std::optional
Objašnjenje:
- std::optional:
Ovo je tip uvoden u C++17 koji može da sadrži vrednost (poput int, string itd.) ili da bude prazan (nullopt). Koristi se za izražavanje mogućnosti da funkcija vrati rezultat ili indikuje neuspeh, umesto korišćenja specijalnih vrednosti (poput -1 ili nullptr). - std::nullopt:
Specijalna konstanta koja označava da std::optional ne sadrži vrednost. - Funkcija podeli:
- Ako je b == 0, vraća std::nullopt, jer deljenje nulom nije dozvoljeno.
- U suprotnom, vraća rezultat deljenja a / b.
- Provera rezultata:
if (rezultat) {
std::cout << "Rezultat: " << *rezultat << std::endl;
} else {
std::cout << "Deljenje nije moguće." << std::endl;
}
std::cout << "Rezultat: " << *rezultat << std::endl;
} else {
std::cout << "Deljenje nije moguće." << std::endl;
}
- if (rezultat): Proverava da li rezultat sadrži vrednost.
- *rezultat: Koristi se za dereferenciranje std::optional objekta i pristup njegovoj vrednosti.
- Jasno izražava mogućnost neuspeha funkcije.
- Smanjuje rizik od grešaka koje bi mogle nastati korišćenjem specijalnih povratnih vrednosti (npr. -1 za grešku, što može biti legalan rezultat deljenja).
Sledeće
Operatori u C/C++ jeziku >| |