C++
| Paradigma: | multiparadigmatický |
|---|---|
| Vznikl v: | 1983 |
| Autor: | Bjarne Stroustrup |
| Poslední verze: | ISO/IEC 14882:2003 / 2003 |
| Typová kontrola: | statické, nebezpečné, nominativní |
| Hlavní implementace: | G++ (GNU C++), Microsoft Visual C++, Borland C++Builder |
| Dialekty: | ISO/IEC 14882:1998 ISO/IEC 14882:2003 |
| Ovlivněn jazyky: | C, Simula, Ada 83, ALGOL 68, CLU, ML |
| Ovlivnil jazyky: | Ada 95, C#, Java, PHP, D, Aikido, Dao |
C++ je objektově orientovaný programovací jazyk, který vyvinul Bjarne Stroustrup a další v Bellových laboratořích AT&T rozšířením jazyka C. C++ podporuje několik programovacích stylů (paradigmat) jako je procedurální programování, objektově orientované programování a generické programování, není tedy jazykem čistě objektovým. V současné době patří C++ mezi nejrozšířenější programovací jazyky.
Obsah |
Historie [editovat]
Název C++ [editovat]
Starší verze jazyka, společně označované jako „C with Classes“ (česky C s třídami), byly používány od roku 1980. Jméno „C++“ vymyslel Rick Mascitti v létě 1983. Toto jméno zdůrazňuje evoluční povahu změn oproti jazyku C; „++“ je operátor inkrementace v C. Poněkud kratší jméno „C+“ je syntaktická chyba, bylo též použito jako jméno jiného nesouvisejícího jazyka.
Standardy C++ [editovat]
Přestože byl jazyk vyvíjen již od počátku 80. let, první oficiální norma C++ byla přijata v roce 1998, další v roce 2003 (INCITS/ISO/IEC 14882-2003). V roce 2006 a 2007 byly přijaty některé aktualizace. Současný standard, neformálně označovaný jako C++11, značně rozšiřuje C++ a byl přijat organizací ISO v září 2011 jako ISO/IEC 14882:2011.[1]
Kompatibilita s jazykem C [editovat]
Jazyk C je až na několik jasně definovaných výjimek podmnožinou C++. Jak uvádí Bjarne Stroustrup, všechny programy uvedené ve slavné učebnici jazyka C The C Programming Language od Briana W. Kernighana a Dennise M. Ritchieho jsou zároveň programy v C++.
První překladače C++ byly preprocesory, které překládaly z C++ do čistého C. Považovat jazyk C++ za pouhé rozšíření jazyka C by ale bylo chybou, protože není s jazykem C zcela kompatibilní. Některé programy v jazyce C nelze překládat překladači pro C++.
„Hello, World!“ [editovat]
Následující jednoduchá aplikace vypíše „Hello, world!“ na standardní výstup.
# include <iostream> // vlozi kod z hlavickoveho souboru iostream (pro in-stream a out-stream) using namespace std; // obor nazvu int main() //hlavni funkce programu, zacatek vlastniho tela programu { cout << "Hello, world!" << endl; // vystup na standardní výstup ktera vypise: Hello, world! cin.get(); // ponecha okno do zmacknuti klavesy "ENTER" return 0; // konec programu, funkce return vraci nejakou hodnotu v nasem pripade 0 }
Argumenty funkce main [editovat]
Tato aplikace vypíše všechny argumenty funkce main.
# include <iostream> using namespace std; int main(int argc, char *argv[]) { for(int i = 0; i < argc; ++i) { cout << i + 1 << ": " << argv[i] << endl;//argv obsahuje cestu ke souboru spuštěného programu a jeho parametry spuštění } return 0; }
Výpočty: Prospěch v C++ [editovat]
float a,n,s,max,prum;
cout << "Zjisteni prospechu z n znamek? \n";
cout << "Kolik bude znamek? ";
cin >> n;
for (int i=0; i<n; i++)
{
cout << "Zadej znamku: ";
cin >> a;
s = s + a;
if (max<a) max=a;
}
prum=s/n;
if (max<3&&prum<=1.5) cout << "S vyznamenanim";
else if (max<5) cout << "Prospel";
else cout << "Neprospel";
Příklady na propočítávání [editovat]
Koncepce objektů jazyka C++.
Příklad NSD Euklidův algoritmus:
int main() { for(;;){ cout<<"Toto je program pro zjisteni NSD dvou cisel.\n"; cout<<"Zadavejte pouze prirozena cisla \n\n"; int a,b,A,B; for(;;){ cout<<"Zadej cislo a: "; cin>> a; if (a>0) {A=a; break;} } for(;;){ cout<<"Zadej cislo b: "; cin>> b; if (b>0) {B=b; break;} } for(;;){ if (a<b) b=b-a; if (a>b) a=a-b; if (a==b) break; } cout<<"\nNSD cisel "<<A<<" a "<<B<<" je cislo "<<a; cout<<"\n\nKonec? (a/n): _\b"; char konec; cin >> konec; cin.ignore(255,'\n'); if(konec=='a') break; system("CLS"); }
Další příklady [editovat]
Příklad záměna proměnných:
#include <cstdlib> #include <iostream> using namespace std; int main() { int a,b; cout << "Program na zamenu hodnot na promennych A a B\n\n"; cout << "Zadej hodnotu promenne A: "; cin >> a; cout <<"Zadej hodnotu promenne B: "; cin >> b; a=a+b; b=a-b; a=a-b; cout <<endl << "Hodnota promenne A je nyni: " <<a <<endl; cout << "Hodnota promenne B je nyni: " <<b <<endl <<endl; system("PAUSE"); return 0; } jeste je mozne deklarovat promennou c, v tom pripade nam pripada v uvahu: c=a a=b b=c
A jeste další příklady [editovat]
Příklad :KOULE
float pi,r,S,V; cout << "Program pro vypocet objemu a povrchu koule" << endl; cout << "vloz hodnotu promenne r:" ; rznovu: cin >> r; if (r<0) { cout << "Zadavej kladna cisla" << endl; goto rznovu; } cout << endl; pi=3.14; V=4*pi*r*r*r/3; S=4*pi*r*r; cout << "Objem koule je: " << V << " cm3" << endl; cout << "Povrch koule je: " << S << " cm2"<< endl;
Dědičnost [editovat]
Pod tímto pojmem se skrývá asi ta největší zbraň OOP. Hlavní myšlenka dědičnosti je znovupoužitelnost, to znamená, že můžeme vytvářet nové třídy založené na třídě, která již byla definována, místo toho abychom museli znovu psát již jednou napsaný kód jen s jinými typy proměnných. Díky dědičnosti je možné napsat kód jednou pro obecnější typ a poté ho používat pro všechny jeho potomky.
Šablony [editovat]
Šablony dále rozšiřují znovupoužitelnost kódu, neboť umožňují napsat kód se zcela obecným (neurčeným) datovým typem. Jsou užitečné především pro základní typy, které v C++ nejsou objekty: mnohé jiné jazyky mohou dosáhnout stejné funkcionality použitím kořene objektové hierarchie.
Přetěžování funkcí a operátorů [editovat]
Jazyk C++ umožňuje deklarovat více funkcí se stejným názvem. Kompilátor určí správné použití podle počtu a typu parametrů. Tato technika se nazývá přetěžování funkcí. Velmi silnou vlastností jazyka je i možnost přetěžovat standardní operátory (například '+' nebo '=') a tak přirozeně využívat tyto operátory pro nově vytvářené třídy a tvorbu abstraktních datových typů.
Standardní knihovna [editovat]
Standard jazyka C++ z roku 1998 se skládá ze dvou částí: popis jazyka a standardní knihovny. Standardní knihovna jazyka C++ obsahuje mírně modifikovanou verzi standardní knihovny jazyka C a Standard Template Library (STL).
Standard Template Library [editovat]
STL obsahuje velké množství užitečných datových struktur a algoritmů, jako například vektory (vylepšené pole), spojové seznamy, iterátory, zobecněné ukazatele, (multi)mapy, (multi)sety. Všechny tyto struktury mají konzistentní rozhraní. S použitím šablon je pak možné programovat generické algoritmy schopné pracovat s kterýmkoliv kontejnerem nebo sekvencí definovanou iterátory.
Používání standardní knihovny – například používání std::vector nebo std::string místo polí ve stylu jazyka C – může vést k bezpečnějšímu a lépe škálovatelnému softwaru.
STL byla původně vytvořena a používána firmou Hewlett-Packard a později také Silicon Graphics. Standard se na ni neodkazuje jako na „STL“, ale jen jako na část standardní knihovny, přesto mnoho lidí stále používá tento pojem na odlišení od ostatních částí knihovny.
Většina kompilátorů poskytuje implementaci standardu C++ včetně STL. Existují také implementace standardu nezávislé na kompilátoru (např. STLPort). Jiné projekty také vytvářejí různé zákaznické implementace knihovny jazyka a STL s různými cíli návrhu.
Reference [editovat]
- ↑ ISO/IEC 14882:2011 [online]. ISO, [cit. 2011-09-03]. Dostupné online. (anglicky)
Literatura [editovat]
- The C++ Programming Language: Bjarne Stroustrup, special ed., Addison-Weslye, ISBN 0-201-70073-5, 2000
- The C++ Standard, Incorporating Technical Corrigendum 1, BS ISO/IEC 14882:2003 (2nd ed.), John Wiley & Sons, ISBN 0-470-84674-7
- Brian W. Kernighan, Dennis M. Ritchie: The C Programming Language, Second Edition, Prentice-Hall, ISBN 0-13-110370-9 1988
- Programování v C++: Miroslav Virius, Vydavatelství ČVUT, druhé vydání, ISBN 80-01-02978-6 2004
- Naučte se C++ za 21 dní: Jesse Liberty, Computer Press, ISBN 80-7226-774-4, 2002
- Programovací jazyk C++ pro zelenáče: Petr Šaloun, Neokortex s.r.o., ISBN 80-86330-18-4, 2005
- Rozumíme C++: Andrew Koenig, Barbara E. Moo, Computer Press, ISBN 80-7226-656-X, 2003
- Úvod do C++: Prof. Ing. Aleš Čepek, CSc., Vydavatelství ČVUT, 2004
- Matoušek David: C++ Builder 4.5, 5.0 a 6.0 - vývojové prostředí, 1. až 3.díl, BEN - technická literatura, Praha 1999-2003
- Bjarne Stroustrup: C++ Programovací jazyk, SA&S a BEN - technická literatura, Praha 1997, překlad, ISBN 80-901507-2-1, ISBN 80-86056-20-1
Externí odkazy [editovat]
- http://www.research.att.com/~bs/ - domovská stránka Bjarne Stroustrupa; mimo jiné uvádí historii C++, odpovědi na často kladené otázky a podrobný glosář. Jde o základní zdroj informací a odkazů věnovaných C++.
- www.builder.cz – Informační server o programování
- http://homel.vsb.cz/~moz017/cpp/ – Český tutoriál programování v C++
- http://www.cplusplus.com/reference/ – Reference jazyka, anglicky
- http://mindview.net/Books/TICPP/ThinkingInCPP2e.html - dvoudílná detailní učebnice Thinking in C++ od Bruce Eckela, volně ke stažení (anglicky). První díl vyšel knižně i v českém jazyce.
Vývojové nástroje [editovat]
- gcc (GNU Compiler Collection) - multiplatformní překladač pro jazyky C, C++, Java a další (svobodný software) - viz GCC
- Code::Blocks - free multiplatformní C/C++ vývojové prostředí
- Anjuta - vývojové prostředí pro operační systém GNU/Linux napsané v GTK+ (GNOME) (svobodný software) - viz Anjuta
- Bloodshed Dev-C++ - vývojové prostředí pro Windows (svobodný software) - viz Dev-C++
- Borland C++Builder - vizuální vývojové prostředí pro platformu Windows i Linux (přenositelnost zdrojového kódu) - viz C++Builder)
- MS Visual C++ - vývojové prostředí společnosti Microsoft - viz Visual C++
- Eclipse - multiplatformní vývojové prostředí podporující C, C++, Javu, PHP,...
- NetBeans - multiplatformní vývojové prostředí, podporuje C, C++, Javu, PHP,...
- KDevelop - vývojové prostředí pro OS GNU/Linux, podporuje množství jazyků.