- První program
- Zdrojový program
- Překlad, sestavení, spuštění
- Komentáře
- Funkce main()
- Vstup a výstup
- Zápisy programu
- Chyby a varování
- Direktiva #include
- Překlad programu
- Úkol č. 1
Ukážeme si, jak vypadá program v C++, setkáme se s objektovými typy a jejich používáním.
První program
Nejdříve bych chtěl upozornit, že budete-li mít JAKÝKOLIV problém s čímkoliv, navštivte Diskuzní fórum, kde vám poradím. Navštěvuji ji často, a proto se odpovědi dočkáte ve velmi krátkém čase. Pokud se chcete opravdu učit C++, zaregistrujte se.
Jako všechny učebnice, i my začneme klasickým „Ahoj světe“.
#include <iostream> // 1
using namespace std; // 2
int main() // 3
{ // 4
cout << "Ahoj svete!" << endl; // 5
return 0; // 6
}
Výsledek:
Ahoj svete!
Zdrojový program
Program v C++ se skládá z jednoho nebo více textových souborů. Pozor na velká a malá písmena, jazyk C++ je rozlišuje!
Překlad, sestavení a spuštění
Zdrojový program musíte přeložit z C++ do strojového kódu. Jaké programy použít, jste se dověděli v úvodní lekci.
Překladač nám vytvoří relativní soubor (*.obj nebo *.o), ale ten nelze spustit; musíme k němu připojit knihovny a vytvořit z něj spustitelný soubor (*.exe).
Co jsme naprogramovali
// 1, // 2… Toto vidíte na každém konci řádku. Není to nic jiného než komentář. Absolutně nepovinný, použili jsme ho k očíslovaní řádků a slouží spíše k orientaci v programu, když se k němu např. po několika měsících vrátíme. Komentář začíná // a vše, co je na TOMTO řádku za těmito lomítky, se tedy vůbec nepřekládá, slouží jen jako poznámky. Můžeme je zapisovat ještě jedním způsobem. Začneme znaky /* a skončíme znaky */ (mezi * a / nesmí být mezera). Takto se zapisují komentáře delší (je jedno na kolik řádků, protože je komentář i zakončen):
// muj komentar | správně |
// muj komentar ktery pokracuje |
špatně - musí být na stejném řádku |
/* muj komentar | špatně - chybí zakončovací znak */ |
/* muj komentar */ | správně |
/* muj komentar */ |
správně |
Funkce main()
Programy se skládají z hlavního programu a z řad podprogramů. Roli hlavního programu zde právě hraje funkce main (malými písmeny). V každém programu musí jedna f-cemain být. Prázdné závorky říkají, že se jedná o funkci s parametry. Slovo int říká, že f-ce (funkce) vypočte a vrátí hodnotu typu int, tedy celé číslo.
Tělo funkce začínáme složenými závorkami { a končíme } (mají podobnou úlohu jako v Pascalu begin a end).
Každý příkaz musí končit středníky. main() je f-ce dělená na dvě části (main() a return 0; ) a tedy až druhá část se zakončuje středníky. Příkaz return znamená vždy ukončení f-ce, která ji zavolala (v našem případě ukončit main() a tím celý program, návrat do OS).
Ta nula za return znamená, že program skončil bez problémů. Nenulové číslo pak určuje kód chyby.
Vstup a výstup
Náš program vypisuje znakový řetězec „Ahoj svete!“. O to se stará příkaz na řádku 5.
cout << "Ahoj svete!" << endl;
Teď vám vysvětlím, co znamená using namespace std;
. Kdybyste toto nenapsali, museli byste pokaždé psát std::cout << "Ahoj svete!" << std::endl;
.
using namespace std;
nám zpřístupní definice. Nejlépe se s tím smiřte a trápit se s tím budeme později.
Vysvětlení (neodborné): Představte si několik balíků krabic. Chcete červenou krabici, ale ty jsou tam 3 (pojmenovány std, ahj, bnm). A protože bychom chtěli banán z krabice ahj, řekli bychom dotyčnému „Chci banán z krabice ahj“. To samé je v C++. Krabice std obsahuje prostory jmen, které se za ní skrývají. std::cout
je tedy cout umístěný v krabici std. Proto na
začátku programu definujeme, že jakýkoliv název funkce obsažený v balíku std (a možná, že i v ostatních balících) se použije PRÁVĚ cout z krabice std. Kdybychom (teoreticky) neuvedli using namespace std;
, překladač
by nevěděl, ze které krabice má cout vzít (pokud by byl ve všech), a v každé by měl jiný význam! Takže si vyberte, jestli budete psát std::cout;
nebo napíšete na začátek using namespace std;
a pak už jen názvy příkazů.
endl
není nic jiného, než ukončení řádku (Enter), ale můžete to udělat i jinak, lépe:
cout << "Ahoj svete!\n";
\n
– příkaz „jdi na další řádek“, nemusí mít mezeru mezi slovy (Z toho vyplývá, že pokud ho do textu kdykoliv napíšete, nevypíše se \n, ale provede se přeskok na další řádek.). Mezi \ a n NESMÍ být mezera.
ZÁKLADEM UČENÍ JE ZKOUŠET! PROTO ZKOUŠEJTE!
cout << "Ahoj svete!" << endl; // správně
cout << "Ahoj svete!<< endl" // špatně,
// endl nesmí být umístěn
// v textu
cout << "Ahoj svete!\n" // správně
cout << "Ahoj \nsvete!" // správně
// (svete bude již na druhém
// řádku)
Část uzavřená do uvozovek je zpráva pro tisk (např monitor). Označení << signalizuje, že se posílá řetězec do cout, je to vkládací operátor.
Možná, že se vám výsledný exe soubor při spuštění hned zavře, aniž byste měli možnost stihnout přečíst text. V takovém případě musíte na konec souboru připsat cin.get();
.
#include <iostream>
using namespace std;
int main()
{
cout << "Ahoj svete!" << endl;
cin.get(); /* někdy je třeba použít 2×. cin.get(),
cin.get(); vyčká na zmáčknutí klávesy ENTER */
return 0;
}
Ve Visual C++ dáme pro spuštění Ctrl + F5. V Borland C++ 3.1 stačí stisknout klávesu F9 (pro přeložení). Použijeme-li překladač MinGW32, který se spouští z příkazové řádky, zadáme příkaz g++ PRVNI (název souboru je PRVNI).
Hlavičkový soubor
Podobně jako v jiných programovacích jazycích, i v C++ platí, že můžeme v programu pracovat s tím, co překladač už zná. Standardní hlavičkové soubory v C++ jsou bez přípony, v jazyce C mají příponu .h a někdy také .hpp.
Informace o základních vstupních a výstupních proudech jsou v hlavičkovém souboru iostream (ve starších překladačích iostream.h).
Aby je měl překladač k dispozici, musíme jej vložit do našeho programu, nejlépe hned na začátek.
#include <iostream> // direktiva preprocesoru
using namespace std; // zpřístupní definice
int main() // hlavička f-ce
{ // začátek těla f-ce
cout << "Ahoj svete!" << endl; // zpráva
return 0; // ukončuje main()
} // konec těla f-ce
Zápisy programu
Klíčová slova (return, int…) nemůžeme rozdělit mezerou nebo přechodem na nový řádek.
Chyby a varování
Pokud něco napíšeme špatně, překladač oznámí chybu. Vedle chyb C++ hlásí také varování. Chyby musíme bezprostředně odstranit, neboť s nimi nelze program spustit. Varování vždy upozorňují na situaci, která je z hlediska syntaxe správná, ale může mít pro programátora jiný význam, než očekává. Proto je důležité sledovat, co hlásí (vlastní zkušenost je, že 70 % varování chybu znamená).
Direktiva #include
Pokud překladač narazí na výskyt #include, nahradí ji obsahem určeného souboru.
#include <soubror>
– pokud použijeme tento zápis a nespecifikujeme úplnou cestu, bude soubor hledán
ve standardním adresáři pro ukládání hlavičkových souborů.
#include "soubor"
– soubor bude hledán nejdříve v adresáři se zdrojovým souborem a pak teprve v adresáři s hlavičkovými soubory.
Ještě o překladu programu
Překlad probíhá standardně ve 3 fázích. Zdrojové soubory se zpracují preprocesorem, který provede kontextovou úpravu (odstraní komentáře, vloží text souborů uvedených v direktivách #include apod.), pouze zařídí, že takto bude vidět soubory překladač, nic takového se ve skutečnosti nestane.
Ve druhé fázi se vytvoří relativní soubory a ve třetí je spojí linker s knihovnou a vytvoří spustitelný soubor.
Úkol č. 1
Vytvořte program, který vypíše na 5 řádcích informace o vás (jakékoliv).
Staňte se aktivními účastníky kurzu!
Chcete-li se aktivně učit tento jazyk, jednoduše se registrujte, je to zdarma.
Ptejte se v Diskuzním fóru, čemu nerozumíte, nebo zda by to šlo jinak apod.