C++

Из Википедије, слободне енциклопедије
Развојно окружење за C++
Бјарне Строуструп

C++ је виши програмски језик који је првобитно развијен у Bell Labs (лабораторији телекомуникационе компаније Bell) за објектно оријентисано програмирање у пројекту под руководством Бјарнеа Строуструпа током 1980-их као проширење програмског језика C, па му је оригинално име било „C са класама“ (енгл. C with classes). Због велике потражње за објектно оријентисаним језицима и способностима, стандард за програмски језик C++ ратификован је 1998. у стандарду ISO/IEC 14882.

Историја C++-а[уреди]

Почетком осамдесетих година у Беловим лабораторијама Бјарне Строуструп, дански научник, радећи на проширивању језика C развио је суштински нов језик кога је назвао C са класама. Закључио је да је Simula имала веома добре функције за развој великих програма, али је тај језик био преспор за коришћење у пракси. BCPL (енгл. Basic Combined Programming Language) је био брз али превише ниског нивоа за равој великих програма. Строуструп је изабрао C као базу, јер је C био генерално оријентисан, брз и у широкој употреби. Почео је да ради на побољшању програмског језика C додајући му функције сличне онима које има Simula. Такође, утицај су имали ALGOL 68, Аda, CLU и ML. Аутор је желео да побољша језик C развојем подршке објектно-оријентисаном програмирању. У 1983. години тај назив је промењен у C++. Језик C++ се разликује од обичног C-а пре свега подршком објектно-оријентисаном програмирању. Али, у њему има и низ нових могућности, које нису објектног карактера, због којих је писање програма који нису објектне природе удобније реализовати у C++-у него у C-у. C++ је данас неспорно један од најмоћнијих, али и најкомплекснији програмски језик. Због компактности програма, брзине извршавања и преносивости представља незаменљив алат сваког професионалца. Због ових особина заузима једно од доминантних места у свету професионалног програмирања.

Назив[уреди]

Према Строуструпу назив C++ симболизује еволуционарни напредак од C-a.[1] Назив је осмислио Рик Масцити. Када је Масцити био неформално интервјуисан о настанку имена 1992. године, одговорио је да је назив настао у духу програрамирања, јер оператор за инкрементацију (++) симболише напредак. Тада је било уобичајена пракса да се тако означава побољшана верзија софтвера.

Развојна окружења[уреди]

Интегрисано развојно окружење обједињава све кораке односно фазе развоја софтвера у јединствену целину што олакшава писање и тестирање програма.
Неки од најпознатијих интегрисаних развојних окружења, чије се коришћење истовремено препоручује у оквиру предмета C/C++ програмски језик, су:

  • Microsoft‘s Visual C++ (Windows)
  • Code::Blocks (Windows, Linux)
  • Netbeans C/C++ (Windows, Linux)

Синтакса језика C++[уреди]

C++ има додатне резервисане речи у односу на C, а такође има и дефинисан логички тип податка bool који у C-у не постоји. У језику C++ као додатак имамо следеће најчешће коришћене службене речи:


asm        bool        catch        char 
class      delete      explicit     export 
false      friend      inline       mutable
namespace  new         operator     private 
protected  public      template     this 
throw      true        try          typename
using      virtual


Логички тип bool[уреди]

У C++-у за величине логичког типа могу се уместо 0 и 1 користити вредности true (тачно) и false (нетачно). Логичка константа false је једнака нули, а свака друга вредност се третира као тачна. Када се true конвертује у цео број резултат је 1. За опис променљивих логичког типа користи се резервисана реч bool.

Пример C++ програма[уреди]

Анализирајмо следећи пример у програмском језику C++. Линија 1 је специјалан тип исказа који се назива предпроцесорска наредба или директива. У овом случају, ми говоримо компајлеру да желимо да користимо iostream библиотеку. Библиотека iostreamсадржи део кода који описује компајлеру шта операције cout и endl значе. Другим речима, у C++ је неопходно укључити библиотеку iostream у којој се налазе функције за штампање података на екрану. У линији 3 се декларише main() функцијa.

1 #include <iostream>
2
3 int main()
4 {
5 using namespace std;
6 cout << "Hello world!" << endl;
7 return 0;
8 }

Линије 4 и 8 указују компајлеру које линије припадају main() функцији. Све линије кода које се налазе између отворене витичасте заграде у линији 4, и затворене витичасте заграде у линији 8 представљају део main() функције. У линији 5 је наш први исказ. Опис операција cout и endl се налази у оквиру библиотеке iostream. Међутим, у оквиру библиотеке iostream, постоји тачно одређени именски простору std у оквиру кога је наведена дефиниција ових функција за штампање. Стога је неопходно коришћењем исказа using указати комајлеру да треба да погледа унутар одељка са називом std (скраћениза за стандард) и да покуша да пронађе дефиницију за cout и endl, уколико приликом компајлирања није успео нигде другде да пронађе ове дефиниције. Овај исказ је неопходан компајлеру да би успео лакше да пронађе дефиницију операција cout и endl, које користимо у линији 6. У линији 6 се налази исказ штампања. cout је специјални објекат који представља конзолу/екран. Симбол << је оператор излаза, који указује компајлеру да оно што следи након симбола треба бити оштампано на екрану/конзоли. endl је специјалан сyмбол који курсор пребацује у следећи ред конзоле. Линија 7 је наредба повратка (return statement). Након завршетка рада програма, шаље се повратна вредност систему која описује да ли програм извршен успешно или не. У овом конретном примеру, наредбом return се враћа вредност нула оперативном систему што значи да је све извршено прописно. Пракса је да се користе ненулте вредности када је несто пошло по злу, односно када програм због неких проблема треба да прекине са радом.

Референце у језику C++[уреди]

Референцна променљива је псеудоним, алиас, што уствари представља други назив за постојећу променљиву. Након што је референца једном иницијализована, могуће је приступити променљивој или преко њеног назива или коришћењем референце.

Поређење показивача и референци[уреди]

Референце се често мешају са показивачима, међутим постоје три главне разлике између показивача и референци, а то су:

  • У програму не може да постоји null референца. Увек мора да важи претпоставка да је референца повезана са легитимним тј.

активним делом меморије односно складишта (storage).

  • Једном иницијализована референца не може бити промењена да референцира другу променљиву или објекат. Супротно референцама,

показивачи могу да буду променљени и да у различитим временским тренуцима показују на различите променљиве односно објекте.

  • Референца мора бити иницијализована приликом креирања, за разлику од показивача који могу бити иницијализовани у било ком тренутку.

Креирање референци у C++-у[уреди]

О имену променљиве можемо размишљати као о лабели која је се односи на локацију променљиве у меморији. Ако кренемо корак даље, о референцама можемо размишљати као о другој лабели која се односи на ту меморијску локацију. Стога је могуће приступити садржају променљиве или преко назива променљиве или преко референце. Претпоставимо да имамо следеће променљиве у програму:

int i = 17;
double d;

Можемо затим, на основу дефинисаног правила, декларисати референцу за променљиву на следећи начин:

int& r = i;
double& s = d;

Ознака & (амперсенд) се у C++-у чита као референца. Стога, прву декларацију можемо прочитати као "r је целобројна референца променљиве i" а другу као "s је реална double референца променљиве d".

C++ и објектно-оријентисано програмирање[уреди]

C++ потпуно подржава објектно-оријентисано програмирање, укључујући четири основна концепта објектно-оријентисаног програмирања: енкапсулацију, апстракцију, наслеђивање и полиморфизам.

C++ стандардна библиотека[уреди]

C++ стандардна библиотека (C++ Standard Library) је скуп класа и функција које су написане на изворном језику. C++ стандардна библиотека обезбеђује неколико генеричких контејнера, функција које ангажују и манипулишу овим контејнерима, објекте функција (functors), генеричке стрингове и токове (укључујући стандардни улаз/излаз, а и рад са фајловима),као и стандардне функције за обављање свакодневних задатака као што су проналажење квадрата, корен броја итд... Својства C++ стандардне библиотеке су смештена у именском простору стд. C++ стандардна библиотека се може поделити у два дела:

  • Стандардна библиотека функција (The Standard Function Library): Ова библиотека се састоји из функција опште намене које су самосталне и које нису део класа, а наслеђена је из C-а.
  • Библиотека OO класа (The Object Oriented Class Library): Представља колекцију класа и одговарајућих функција чланица.

Стандарна C++ библиотека садржи све елементе C библиотеке, уз мале измене које обезбеђују сигурност употребе типова података (type safety).
Стандардна библиотека функција се састоји из следећих категорија:

  • Улазно/излазне функције (I/О)
  • Функције за рад са стринговима и карактерима
  • Математичке функције
  • Функције за рад са временом и датумом
  • Функције за динамичко управљање меморијом
  • Остале функције

Стандардна C++ OO библиотека дефинише додатни скуп класа које пружају подршку многобројним свакодневним активностима, укључујући улаз/излаз, рад са стринговима и процесирање бројеве. Ова библиотека се састоји из:

  • Стандардних C++ класа за улаз/излаз
  • Класа за рад са стринговима (стринг)
  • Класа за рад са бројевима
  • STL контејнерских класа
  • STL алгоритама
  • STL функцијских објеката
  • STL итератора
  • STL алокатора
  • Класа за управљање изузецима
  • Библиотека за локализацију
  • Библиотека за разноразну подршку

Референце[уреди]

Спољашње везе[уреди]

Медији везани за чланак C++ на Викимедијиној остави