C++

**C++** — виш програмски јазик кој првобитно е развиен во Bell Labs (Лабораторатоија на компанијата за телекомуникации Bell), од страна на Bjarne Stroustrup во 1979 како надополнување на програмскиот јазик C. 
С++ има широка употреба во софтверската индустрија, и останува еден од најпопуларните програмски јазици што некогаш биле создадени. Некои од неговите апликациони домени вклучуваат системски софтвери, апликациони софтвети, уреди, embedded software, опслужувач со високи перформанси и клиентски апликации, и софтвер за забава како што се видеоигрите.
Јазикот е првобитно развиен како подобрување на програмскиот јазик C со додавање на класи, потоа виртуелни функции преоптоварување на оператори,повеќекратно населување, шаблони и исклучоци меѓу други одлики. После неколку години развивање C++ е ратификуван во 1998 како стандарден ISO/IEC 14882.
мини|Логото на C ++ одобрено од Standard C ++
## Историја

Stroustrup започнал со работа на ‘C with Classes’ во 1979. После искуството од својот докторски труд доаѓа до идеја да направи нов програмски јазик. Тој заклучил дека Simula имал одлики соодветни за големи софтверски развивања,но овој програмски јазик бил премногу бавен за практична употреба, додека BCPL бил доволно брз но премногу на low-level да биди соодветен за големи софтверски развивања. Stroustrup започнал со подобрување на програмскиот јазик C со одлики на Simula. C бил одбран поради неговата брзина, преносливост и широка употреба. Покрај C и Simula други јазици кои го инспирирларе се: ALGOL 68, Ada, CLU и ML. Првото јавнопубликување било во октомври 1985г.
Во 1983, името на јазикот е променето од C with classes во C++. Новите одлики биле додадени вклучувајќи и виртуелни функции, име на функциите и преоптоварување на операторите, слободна софтверска меморија контролирана од корисникот, проверка на типот И во стил на BCLP коментари во една линија со две коси црти (//).
Со развивањето на C++ јазикот дошло и до развивање на стандардната библиотека. Првиот додаток на C++ стандардната библиотека била stream I/O library која овозможила заменување на традиционалните C функции printf и scanf. Подоцна меѓу најзначајните додатоци на стандардната библиотека, била Standard Template Library.
C++ и понатаму се употребува и сѐ уште е еден од најчесто употребуваните програмски јазици за развивање на професионални апликации. Јазикот го користат програмери од целиот свет.

## Стандардизирање на јазикот

Во 1998г. C++ е стандардизиран и е објавен меѓународниот стандард ISO/IEC 14882:1998 (неформално познат како C++98). Неколку години после официјалното издавање комитетот за стандардизација прави извештај на грешки, и ја објаува корегирана верзија на стандардизираниот C++, IISO/IEC 14882:2003, во 2003. Во 2005, објавен е технички извештај наречен “Library Technical Report 1”(Често накратко познат како TR1). Иако не дел од официјалниот стандард наведува бројни надоградби на стандардната библиотека, кои се очекувало да бидат вклучени во следната верзија на C++. Поддршка за TR1 се развива во речиси сите C++ компајлери кои моентално се употребуваат.

## Потекло на поимот

Според Stroustrup името индицира на еволутивната природа на промените од C. За време на периодот на развиток на C++ јазикот бил познат како “Новиот C” потоа како ”C со класи”. Крајното име e создадено од Rick Mascitti и првпат било употребано во декември, 1983г. Opераторот “++” покажува на подобрувањето на компјутерската програма.

## Филозофија на C++

За дизајнот и Еволуцијата на C++, Bjarne Stroustrup објаснува некои правила кои ги гористел при создавањето на C++.

* C++ е дизајнитран да биде статично типизиран програмски јазик за општа намена кој е исто толку ефикасен и пренослив како и C.
* C++ е дизајниран директни и комплетно да поддржува повејќекратни програмски стилови (процедурално програмирање, абстракција на податоци, објектно-ориентирано програмирање и генеричко програмирање)
* C++ е дизајниран да им дава на програмерите избор, дури и овозможува програмерот да избере неточно
* C++ е дизајниран да биде компатибилен со C колку што е тоа возможно, со тоа е овозможеноа лесна транзиција од C.
* C++ избегнува одлики кои се за специфична платформа, или кои не се за генерална употреба 
* C++ е дизајнирн да функционира без софистицирана програмска околина

## Стандардна библиотека

ANSI/ISO C++ стандардот од 1998г. Се состоел од два дела: core language и C++ Standard Library; подоцна е вклучен поголемиот дел од Standard Template Library (STL) и малку изменета верзија на C++ стандардната библиотека.Постојат многу C++ библиотеки кои не се дел од стандардот, користатејќи спецификации на врски библиотеките дури и можат да бидатнапишани во јазици како C, Fortran, Pascal или Basic. Кои од овие се поддржуваат зависи од компајлерот.
Стандардната библиотека на C++ ја вклучува стандардната библиотека на C со некои мали модификации за да се прлагоди со C++ јазикот. Друг голем дел од C++ библиотеката е заснована на STL. Ова овозможука корисни алатки како containers (на пример вектори и листи), итератори да обезбедат пристап до елементите од овие контејнери и алгоритми да извршуваат операции како пребарување и подредување. Исто така е возможно со користење на шаблони да се напишат генерички алгоритми кои работат со било кои контејнери или секвенции дефинирани од итератори. Во C до одликите на библиотеките се пристапува со користење на #include директивата за да вклучи standard header.
 
## Одлики на јазикот

C++ го наследува најголемиот дел од синтаксата на C и C претпроцесороот. Следниот пример е верзијата на Stroustrup за програмата Hello world која ја користи стрим погонот на стандардната библиотека да ја напише пораката на стандардниот излез.

Примери:


```cpp
# include <iostream>

int main()
{
   std::cout << "Hello, world!\n";
}
```


Или


```cpp
#include <iostream>
using namespace std;

int main()
{
    int a;
    cout << "1,2 or 3" << endl;
    cin >> a;
}
```



## Оператори и преоптоварување на операторите

C++ овозможува повеќе од 30 оператори, покриеност на основната аритметика, манипулација со битови, споредби, логички операции и повеќе. Речиси сите оператори можат да бидат преоптоварени за типови што се дефинирани од корисникот, со неколку исклучоци како пристап за членови (. и .*). Големиот сет на оператори кои можат да се преоптоварат е клучно за користење на C++ kako a domain specific language.Операторите кои можат да се преоптоварат се исто така важен дел од многу напредни C++ програмски техники како паметни покажувачи.

## Шаблони

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

Шаблоните се различи од макроата. И шаблоните и макроата овозможуваат кондиционални компилации. Шаблоните се свесни за значењето и типот на системот на јазикот којшто ги придружува како и за сите дефиниции за времето компајлирање. И може да извршуваат операции на високо ниво вклучувајќи го programmatic flow control засновано на проценка од строго проверени параметри. Макроата се способни за кондиционална контрола врз компилацијата засновано на претходно одредени критериуми но не можат да инстанцира нови типови,или да извршат проценка на типовите и во ефект се ограничени на претходна компилација, замена на текст и вклучување/исклучување на текст. Со други зборови со макроата може да се контролира протокот на компилации, на основа на претходно дефинирани симболи, но не може, за разлика од шаблоните, независно да инстанцира нови симболи.Шаблоните се алатки за статично полиморфно и генеричко програмирање.

Како резиме, шаблоните се compile-time параметризирани функции или класи напишани без знаење на специфичните аргументи користени за да се инстанцира. После инстанцирањето крајниот код е еднаков со кодот напишан специјално за изминатите аргументи. На овој начин, шаблоните овозможуваат начин за

## Објекти

C++ воведува објектно-ориентирано каракетеристики во C. тоа нуди класи, што ги обезбедуваат четирите одлики обично присутни во објектно-ориентираните јазици (и некои не-објектно-ориентирано јазици): апстракција, encapsulation, наследување и полиморфизам. Објектитe се instances од класи создадени во runtime. Класата може да се замисли како шаблон од која што може да се генерираат ризлични поединечни објекти додека работи програмата.

## Енкапсулација

Енкапсулација е криење на информации со цел да се осигура дека структурите на податоци и операторите ќе бидат користени како што било замислено и да се направи корисничкиот модел поочигледен за развивачот.

Категорија:C++
Категорија:Програмски јазици