spájame
slovenskú
IT komunitu
pridaj sa
Registrácia · Login

Róbert Mokráš 2.9.2011
Hodnoť článok:
2 2

C++ - 1. lekcia

V tejto lekcii si povieme niečo o vzniku jazyka C++ a o vývojovom prostredí. Ďalej si napíšeme svoj 1. program a dopodrobna si rozpíšeme, čo každý príkaz znamená.

Vznik C++

Jazyk C++ vznikol podobne ako jazyk C v Bell Labs, kde ho začiatkom 80. rokov vyvinul Bjarne Stroustrup. Založil ho na stručnosti jazyka C, jeho vhodnosti pre systémové programovanie, široko rozšírenej dostupnosti a úzkej väzbe na operačný systém UNIX. C++ je teda nadstavbou jazyka C, čo znamená, že každý program, ktorý je písaný v C, pôjde aj v C++. Tak isto jazyk C++ používa knihovne z jazyka C.

Vývojové prostredie

Nato, aby sme mohli napísať nejaký program a následne ho spustiť, potrebujeme vývojové prostredie. Ja osobne používam Microsoft Visual Studio C++ 2010 EXPRES, ale okrem toho existuje borland c++, dev-c++, Code::Blocks a mnoho ďaľších. Konkrétne Microsoft Visual Studio si môžete stiahnuť priamo odtiaľto

Prvý program

Podobne ako v každej lekcii, začneme s programom "Hello World".
Spustíme si program C++, dáme New project, klikneme na Win32 Console Application a do položky Name napíšeme meno programu a stlačíme OK. Ďalej stlačíme Next a odškrtneme položku empty project a stlačíme Finish. Otvorí sa nám prázdne okno. Klikneme na Project ďalej Add New Item... a otvorí sa nám okno, v ktorom klikneme na C++ FILE(.cpp), do položky name napíšeme ten istý názov ako predtým a nakoniec stlačíme ADD a vytvorí sa nám pracovná plocha pre písanie programu. C++ rozlišuje malé a veľké písmená!
A môžeme písať.

#include < iostream > // < iostream.h >
int main ()
{
    using namespace std;
    cout<< "Hello World"; //Ahoj svet
    cout<< endl;
    system ("pause");
    return 0;
}

program spustíme stlačím F5

Vysvetlenie

V prvom rade, slová, ktoré sú za dvomi lomítkami // sú len KOMENTÁRE. Program ich pri behu neberie do úvahy, slúžia len programátorovi, aby si popísal daný riadok, alebo prípadne vysvetlil nejakú skratku. Nemusia sa písať. Ale aj komentáre majú nejaké tie pravidlá. Komentár sa môže písať len na jeden riadok.
//Toto je komentár na jeden riadok
Tieto komentáre môžeme písať za príkazy, alebo na nový riadok.
Keď chceme použiť viac riadkový komentár, musíme ho vložiť medzi /* */
/* Toto je komentár na
viac riadkov */

#include < iostream > - Jazyk C++ používa preprocesor. To je program, ktorý spracováva zdrojový kód skôr, než príde na rad hlavný preklad. Pre vyvolanie tohoto preprocesoru nemusíme nič urobiť, spustí sa automaticky.
#include < iostream > // direktiva preprocesora
Táto direktiva preprocesoru hovorí, aby do vášho programu pridal obsah súboru iostream. Predpona iostream obsahuje príkazy cout(výstup) a príkaz cin(vstup). Bez tejto predpony by cout ani cin nefungovali. Jedná sa o hlavičkový súbor. Pri starších programoch sa používa namiesto iostream - iostream.h
Existuje mnoho ďalších takýchto hlavičkových súborov, ktoré vám sprístupnia rôzne príkazy. Napríklad hlavičkový súbor #include < cmath > vám sprístupní rôzne matematické príkazy, ako napríklad vypočítať druhú odmocninu sqrt(), premeniť radiány na uly...

using namespace std; - Direktiva menného priestoru. Táto direktiva vám sprístupní direktivu iostream (cout, cin, endl). Podpora menných priestorov je novým rysom jazyka C++, ktorý bol navrhnutý pre zjednodušenie písania programu spájajúceho už existujúci kód niekoľkých dodávateľov. Problém nastane, keď použijeme 2 produkty, ktoré majú tak isto pomenovanú funkciu, napríklad denisa(). Keď túto funkciu zavoláte, prekladač nebude vedieť, ktorú verziu potrebujete. Menný priestor umožňuje dodávateľovi zabaliť svoje zbožie tak, aby ste pomocou mena menného priestoru mohli určiť, od ktorého dodávateľa výrobok chcete. Napríklad spoločnosť Windows Industries by mohla svoje definície umiestniť do menného priestoru nazvaného Windows. Potom by výraz Windows::denisa() mohol stať úplným menom pre ich funkciu denisa(). Podobne by Piscine::denisa() označoval verziu funkcie denisa() spoločnosti Piscine Corporation. Takže teraz by váš program mohol rozlišovať rôzne verzie pomocou menných priestorov:

Windows::denisa("Programujem v C++"); // Použitie menného priestoru Windows
Priscine::denisa("Snažím sa programovať v C++"); // Použitie menného priestoru Priscine

Do menného priestoru std sú takým istým spôsobom umiestnené triedy, funkcie a premenné, ktoré predstavujú štandardné komponenty prekladača jazyka C++. To znemaná že premenná cout, ktorá je používaná pre výstup a definovaná v iostram, sa teda v skutočnosti nazýva std::cout a endl zase std::endl. Namiesto neustáleho písania std:: môžeme buď pod #include napísať using namespace std (takto bude platiť pre celý program, všetky funkcie), alebo to môžme napísať do funkcie

#include < iostream >
int main ()
{
    using namespace std;
    cout<< "Hello World";
    cout<< endl;
    system ("pause");
    return 0;
}
//.....................
#include < iostream >
using namespace std;
int main ()
{
    cout<< "Hello World";
    cout<< endl;
    system ("pause");
    return 0;
}
//....................
#include < iostream >
int main ()
{
    std::cout<< "Hello World";
    std::cout<< std::endl;
    system ("pause");
    return 0;
}

int main () - je to funkcia, ktorá sa delí na 2 časti. 1. časť je int main (), ktorej sa hovorí hlavička funkcie. 2. časť je telo cyklu, ktoré je uzavreté v zložených zátvorkách {}. Telo funkcie predstavuje vaše príkazy. Každý príkaz sa musí končiť bodkočiarkou;.
Obecne je funkcia v C++ volaná inou funkciou a hlavička funkcie popisuje rozhranie medzi funkciou a funkciou, ktorá ju volá. Časť pred menom funkcie sa nazýva návratová typ funkcie a popisuje informačný tok z volanej do volajúcej funkcie. Časť medi zátvorkami sa nazýva zoznam parametrov alebo argumentov a popisuje informačný tok z volajúcej do volanej funkcie.
Funkcia main volaná inou funkciou, môže tejto volajúcej funkcii vracať hodnotu, ktorej hovoríme návratová hodnota. V tomto prípade môže funkcia main() vracať celočíselnú hodnotu, ako je naznačené kľúčovým slovom int. Ďalej si všimnime prázdnych zátvoriek. Obecne môže funkcia jazyka C++ predávať informáciu inej funkcie, ktorú volá. V našom prípade prázdne zátvorky znamenajú, že funkcia main() nepreberá žiadne argumenty, preto príkaz return 0 vracia 0.

endl; - endl je príkaz nového riadku. Namiesto endl sa môže napísať "\n";. Toto sa väčšinou vkladá do reťazca.
Logicky, keď nový riadok znamená, aby na monitor program vytiskol nový riadok, musí sa endl/'\n' používať s príkazom pre tisk(cout). Pri žiadnom inom príkaze endl/'\n' nebude fungovať.

cout<<"Hello World";
cout<< enld;
//...............
cout<<"Hello World" << endl;
//...............
cout<<"Hello World\n";

return 0; - je to príkaz návratu.

system ("pause"); - je to príkaz na pozastavenie obrazovky, pokiaľ nestlačíte ľubovolné tlačidlo. Bez tohoto príkazu by nám obrazovka iba preblikla.
Namiesto toho príkazu môžeme použiť cin.get();

cout - Príkaz na vypísanie textu. Časť uzavretá do dvojitých uvodzoviek je zpráva pre tisk(na monitor). V C++ sa akákoľvek skupina znakov uzavretá do dvojitých uvodzoviek nazýva reťazec znakov. Operátor << naznačuje, že príkaz posiela reťazec cout.

Formátovanie vytlačeného textu - To, čo program vytlačí na monitor, záleží od toho, akými príkazmi napíšeme program. Existujú príkazy na vertikálny tabulátor, horizontálny tabulátor, alarm, posun doľava ....

Meno premennej Kód v C++
nový riadok
\n
horizontálny tabulátor
\t
vertikálny tabulátor
\v
posun doľava
\b
návrat vozíku
\r
zvuková výstraha
\a
spätné lomítko
\\
otáznik
?
jednoduchá uvodzovka
\'
dvojitá uvodzovka
\"

Všetky tieto príkazy sa musia nachádzať v reťazci, čiže medzi uvodzovkami.

Príklad:

#include < iostream>
int main ()
{
    using namespace std;
    cout<<"__________";//10 podtržníkov
    cout<<"\b\b\b\b\bROBO\n";
    /*Normálne by malo ROBO vypísať až za všetky podtržníky. Lenže keď sme
    použili 5 krát \b, tak kurzor sa nám posunie o 5 políčok doľava a napíše
    to namiesto tých podtržníkov.*/
    cout<<"Ja programujem\t\t v C++.";
    cout<< endl;
    cout<<"\a\a\aTeraz zaznela zvuková výstraha"<< endl;
    system ("pause");
    return 0;
}

Formátovanie zdrojového kódu - V jazyku C++ sa označuje koniec každého riadku bodkočiarkou. To jazyku C++ umožňuje nakladať so znakom návratu vozíka tak isto ako s medzerou alebo s tabulátorom. Čo znamená, že v C++ môžeme urobiť medzeru tam, kde by sme ukončili riadok a naopak. Tým pádom môžeme jeden príkaz rozpísať na niekoľko riadkov, alebo umiestniť niekoľko príkazov na jeden riadok.
POZOR!!! príkazy sa nesmú rozdeľovať!!!

Oba programy sú správne, ale ten prvý má úhladnejší zdrojový kód

#include < iostream >
int main ()
{
     using namespace std;
     cout<<"Podme sa venovat C++\n";
     system ("pause");
     return 0;
}
//.......................
#include < iostream >
                            int
main
() {       using
                         namespace
std; cout
              <<
"Podme sa ucit C++";
     cout <<

                       endl;

system          ("pause");
            return 0  ; }

Zhrnutie

#include < iostream > - Definuje vstupno-výstupné služby štandardnej knižnice.
using namespace std - doplní v celom programe std:: pred (cin, cout..).
int main() - program sa spustí zavolaním funkcie int main ().
endl - príkaz nového riadku.
return - návratová hodnota.
system ("pause") - pozastavenie programu.
cout - vypísanie textu na monitor.

Cvičenia

skúste si doma napísať programy, kde budete používať rôzne príkazy pre zmenu textu, experimentovať s novými riadkami atď.

Róbert Mokráš Róbert Mokráš

Študuje na STU aplikovanú informatiku.


Hodnoť článok:
2 2

22 komentárov k článku:

Komentovať môžu iba prihlásení

Zaregistruj sa cez bezplatnú registráciu alebo použi login cez Facebook (FB Connect)

Prihlás sa tu, ak už máš profil na Zajtra.sk:


Zabudol som heslo

0 0 Matus_Matis 2.1.2016 13:09:52
Mas Nejaky tazky sposob.
1 0 Hráč Deadded 20.3.2014 10:59:57
Hm... Divne... http://i.imgur.com/lbOiFar.png?1
0 0 For aye 25.2.2013 10:45:38
Miloš: keď už sme pri tom GC, je to hovadina čo si napísal. GC v .NEt nezaťažuje systém, kedže celé .NET je JIT (just-in-time compiled). To znamená že akoby ti nástroj generoval všetky delete keywordy v C++. Kind of, zas nie úplne.
0 0 We@st 19.9.2011 06:17:26
@Jaroslav ja zase preferujem netbeans :P
0 0 Jaroslav Mráz 11.9.2011 12:40:28
Ja preferujem DEV-C++ =) oni to dorobia MS SW je fajn na velke projekty ale ked ho pouziva clovek cely aj s nastaveniami je to dnova instalacia GB dat na disku (vratane kniznic, resource a updateou asi 30). PRe zacinajucich progrmaatorov a ludi, ktory si obcas nieco len tak napisu je rozhodne lepsi.
1 0 Baky 7.9.2011 22:17:53
Milos S: Uff, mas to troska dost popletene s tym ne/manazovanym kodom. VS je komplexne IDE riesenie a podporuje viacero jazykov, ktore su bud manazovane cez CLR (kompilovane do CLI), alebo nemanazovane - native (kompilovane priamo do kodu pre CPU) + dalsie moznosti. Teda samozrejme ze podpruje aj "ozajstne" C++ ISO/IEC 1998 a 2003, ale aj C++/CLI, co je akasi MS nadstavba C++ pre dotNET. Zalezi aky projekt das vytvorit resp. od konfiguracie buildovania. Manazovany a nemanazovany kod sa da koniec koncov aj kombinovat. Drtiva vacsina firiem zameranych (aj) na C++ a Win pouziva prave VS, vratane SAPu ci Esetu a pod...
0 1 Miloš 7.9.2011 16:35:50
Takže som sklamaný, vývoj sa tam pred rokmi zastavil (dev-c++).
0 0 Martin Malina 7.9.2011 16:29:04
Robo >> zacinajuci FEI APIckar :D serus :D Ked tu pises clanky o c++ uz teraz, tak to sa budes riadne nudit na ALPR. Vela zdaru.
0 1 Miloš 7.9.2011 16:27:50
Matúš K: Tým ozajstným C++ čo už vo VS nie je vo svojej podstate som myslel to, že v C++ si treba dávať pozor na uvoľňovanie pamäte a podobne. GC zbytočne zaťažuje systém a spomaľuje aplikáciu. Presatav si, že napíšeš v C++ vo VS šachový program a počítač pri rozmýšľaní po pár minútach (trochu to preháňam, ale teraz berme do úvahy minúty) spustí na pár sekúnd GC. Keby program bežal na skutočnom "čistom" C++ a programátor si neuvoľní pamäť sám, tak je v prdeli slušne povedané. Rýchlosť aplikácie bude tiež vyššia, lebo prebehnutie všetkých objektov GC je určite pomalšie než všetok čas, ktorý sa vynaloží pri uvoľňovaní pamäte klasickým spôsobom (pri jeho sčítaní dokopy). V tomto ostal čistý asi len Object Pascal v nástroji Lazarus (myslím, že Delphi už tiež po novom beží na NET frameworku). Z čístého C++ ostalo len Qt. Vo Windows je ťažké nájsť plnohotnotný kompletný nástroj na programovanie v C++. Plnohodnotný kompletný je u mňa nástroj vrátane IDE, kompilátora, používateľskej podpory a možností využitia. Neviem ako je s možnosťami využitia dev-c++, ale skúsim sa na to pozrieť, keďže nedávno som to hľadal a nevedel som si spomenúť ako sa to vlastne volá.
0 0 Róbert Mokráš 5.9.2011 21:02:55
Hej ?..tak ja som ten v šiltovke The exploited a v tričku Ilegality :D
0 0 We@st 5.9.2011 07:00:43
@Róbert ja tiež :D
0 0 Róbert Mokráš 4.9.2011 14:48:33
@Matúš - Možno bude aj o Jave :)...Ja ešte len nastupujem na FEI. Aplikovaná máš len tam. Síce je aj na FIIT, ale to až na ing stupni, čo pokračuješ z Informatiky.

@Michal - Načo bola spravená táto stránka, keď je ich na internete na tisíce ?..Načo sa vyrába viac druhov notebookov ?...Načo máš viac operačných systémov ?
No skrátka nato, aby si ten kto sa chce učiť, mal na výber z viacerých tutoriálov a mohol si vybrať, ktorý mu najviac sedí, prípadne ich kombinovať. A po druhé, baví ma to.
0 0 YaD 4.9.2011 10:04:31
Ako vývojové prostredie môžem ešte odporúčiť CodeLite (www.codelite.org), ktoré je dosť prepracované, multiplatformné (wxWidgets, plus má pre neho podporu) a napísané v C++, takže paráda. Plus používa gdb ako debugger ;).
0 0 Michal Chovanec 3.9.2011 20:57:35
Načo článok akých je na internete na tisíce?
0 0 Matúš Wewo Bielik 3.9.2011 17:18:31
Autor, iba zo zvedavosti, ktorú fakultu STU študuješ? Aplikovaná informatika je na viacerých odboroch :)
0 0 Matúš Wewo Bielik 3.9.2011 17:16:41
Javu! :) Chcem takéto o Jave! :)
0 0 Róbert Mokráš 3.9.2011 14:26:26
@Matúš - No v prvom rade, toto je článok o C++, takže kto chce začať s C, musí si tutoriál nájsť inde. Tento článok nemá mať skoro nič spoločné s Jazykom C. Máš pravdu, že C je omnoho ľahší na pochopenie, ale to by už bol iný článok. Ja som napríklad začínal s C++ a na pochopenie to bolo dosť ťažké, ale postupom času som tomu začal stále viac a viac chápať.

@Michal - Ako som už spomenul vyššie, je to pravda, že C je ľahší na pochopenie, ale toto je článok o C++ a nie o C.
0 0 Michal Malík 3.9.2011 13:56:54
Článok dobrý, ale 100% súhlasím s @MatúšK ;)
0 0 Matúš Koprda 3.9.2011 12:20:09
@Miloš: C++/CLI je to s garbage collectorom a beží to na .NET frameworku. C++ je stále C++ a neviem o tom, že by ho VS2010 nemalo.. To by bola riadna blbosť ho vyhodiť. :&

Neviem si pomôcť, ale učiť sa rovno C++ mi príde strašne mätúce. Už len to, že cin/cout sú vlastne triedy s preťaženými operátormi << a >>, ktoré inak znamenajú SHL a SHR. Pre kompletné pochopenie toho "správneho" C++kového Hello worldu treba ovládať dosť advanced koncepty jazyka (a to sa na začiatku nedá), kdežto na kompletné pochopenie Cčkového hello worldu s printf() stačí relatívne málo.

Takže sorry, ja stále odporúčam začať s tutoriálom, kde sa používa printf() a scanf() namiesto cin a cout. Okrem iného je dobré ich ovládať kvôli funkciám ako sscanf, sprintf, na ktoré nie sú "C++" ekvivalenty.
0 0 Róbert Mokráš 3.9.2011 10:15:22
@Miloš S - Presne tak, tento seriál je o textovom C++, čiže o konzole. V konzole sa ľahšie naučia základné veci. A keď sa jedná o konzolu, tak je podľa mňa jedno, že aké vývojové prostredie použijú. Je ich tam viac na výber.

@We@st - Keď myslíš operátor vloženia, tak ten tam je vysvetlený. Síce len jednou vetou, ale na teraz to stačí. Bližšie sa cout/cin budem venovať v ďalšej lekcii, keď si napíšeme niečo o premenných :)
Zajtra.sk > Programovanie > Seriály > C++ - 1. lekcia


Kritika

Vieš ako robiť veci lepšie? Pomôž našim odvážnejším členom a skritizuj im projekty!

Reklama

Seriály zo Zajtra.sk

Reklama