<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE html PUBLIC '-//W3C/DTD XHTML+Voice 1.2 /EN' 'http://www.voicexml.org/specs/multimodal/x+v/12/dtd/xhtml+voice12.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' xmlns:ev='http://www.w3.org/2001/xml-events'>
<head>
<link rel='stylesheet' href='http://pabi3.com/modules/items/voice.css' type='text/css' media='all' />
<form xmlns='http://www.w3.org/2001/vxml' id='title'>
<block>
The article Programovanie v C++ - 5. diel is written by Ribi
</block>
</form>
<form xmlns='http://www.w3.org/2001/vxml' id='body'>
<block>
Serial o programovani v programovacom jazyku C++. V dnesnom, uz piatom pokracovani si napiseme nas prvy skutocny program a naucime sa ako ziskavat data zo standartneho vstupu a ako data vypisovat a zoznamime sa s hlavickovymi subormi.</block>
</form>
<form xmlns='http://www.w3.org/2001/vxml' id='full'>
<block>
Hlavickove subory
      Kazdy vacsi program sa raz dostane do stadia, ked by uz nebolo vhodne ho
      mat cely napisany v jedinom zdrojovom subore a budete chciet program
      rozdelit do suborov viacerych. Navyse budete este potrebovat, aby niektore
      premenne alebo funkcie boli dostupne len pre urcite subory a pod. Vtedy
      prichadzaju na rad hlavickove subory.
      Predstavte si nasledujucu situaciu.
      
      // main.h

      int i;
      
      
      // main.cpp

      #include "main.h"


      int main() {

      &nbsp;&nbsp;&nbsp;&nbsp;i = 10;

      &nbsp;&nbsp;&nbsp;&nbsp;return 0;

      }
      
      Prikazom #include "main.h" sme sposobili, ze obsah suboru main.h bude
      spristupneny aj pre subor main.cpp. Preto mozeme pracovat s premennou i,
      ktoru sme deklarovali v subore main.h aj napriek tomu, ze v subore main.cpp
      akoby neexistovala.
      Skuste si ale predstavit, ze by sme premennu i potrebovali pouzit aj v inom
      subore, napriklad main2.cpp.
      
      // main2.cpp

      #include "main.h"


      void func() {

      &nbsp;&nbsp;&nbsp;&nbsp;i = 10;

      }
      
      Tu by uz nastal problem, pretoze by sme globalnu premennu i akoby deklarovali
      dva krat (v subore main.cpp a v subore main2.cpp). Situaciu vyriesime pomocou
      klucoveho slova extern.
      
      // main.h

      extern int i;


      // main.cpp

      #include "main.h"


      int i;

      ...      
      
      Ked premennu "i" zapiseme v subore main.h ako externu, v podstate tym kompilatoru
      povieme, ze premenne "i" deklarujeme v nejakom inom subore, pricom subory,
      ktore budu includovat main.h, budu moct premennu i vyuzivat. Ale ako som uz
      napisal, musime je v niektorom zo suborom deklarovat, resp. definovat.
      
      // main.cpp

      #include "main.h"

      int i;

      ...
      
      Teraz uz bude vsetko v poriadku a globalnu premennu "i" budeme moct pouzit v
      kazdom subore, ktory bude hlavickovy subor main.h inkludovat.
      Vypisovanie udajov
      Teraz uz nadisiel cas napisat si nas prvy program. Byva zvykom napisat na
      obrazovku "Hello, World!", ja sa ale drzim vlastnych zvykov. Na to, aby sme
      mohli na obrazovku vypisovat text, budeme musiet inkludovat hlavickovy subor
      iostream. Na vypisovanie udajov (textu) nam bude sluzit dvojica datovych
      prudov cout a endl.
      Syntax: (std::)cout &lt;&lt; _prud1_ ... &lt;&lt; _prudN_ [ &lt;&lt; (std::)endl ]
      Prikaz endl sposobi, ze sa skoci na dalsi riadok a "splachne" sa pamat alokovana
      pre cout. Naucte sa preto endl pouzivat.
      
      #include &lt;iostream>


      int main() {

      &nbsp;&nbsp;&nbsp;&nbsp;std::cout &lt;&lt; "Dakujeme ti za tento serial, ribi!" &lt;&lt; std::endl;

      &nbsp;&nbsp;&nbsp;&nbsp;return 0;

      }
      
      Vsimnite si, ze som napisal std::cout a std::endl namiesto cout a endl. Urobil
      som tak preto, lebo cout a endl su sucastou tzv. namespace. O
      tom ale az niekedy neskor.
      Taky namespace sluzi ako akysi rozlisovac v pripade, ze potrebujete mat napr.
      viac premennych s rovnakym nazvom. K premennym z namespace-u potom pristupujeme
      tak, ze zadame meno namespace-u, potom operator "::" a meno premenej, ktoru
      potrebujeme.
      
      int i;

      namespace name{

      &nbsp;&nbsp;&nbsp;&nbsp;int i;

      };

      ...

      i = 0; // globalna premenna i

      name::i = 0; // namespace

      
      Ked sa vam v urcitej casti kodu nebude chciet vypisovat name::i, tak jednoducho
      mozete napisat prikaz using namespace name. Ten sposobi, ze vam
      bude stacit napisat len "i" (nie name::i) a kompilator automaticky pochopi, ze
      chcete pristupovat k namespace-u.
      Nas program na vypisovanie udajov bude teda po uprave vyzerat nasledovne.
      
      #include &lt;iostream>


      using namespace std;


      int main() {

      &nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; "Dakujeme ti za tento serial, o, velky ribi!" &lt;&lt; endl;

      &nbsp;&nbsp;&nbsp;&nbsp;return 0;

      }
      
      Citanie z klavesnice
      Na citanie z klavesnice pouzijeme datovy prud cin (takisto sa nachadza v hlavickovom
      subore iostream).
      Syntax: (std::)cin >> _premenna_;
      Pomocou cin mozeme nacitat prakticky akykolvek typ premennej, cize int, char,
      float a pod. Vami zadany text v programe musite potvrdit stlacenim klavesy
      Enter. Az potom sa totiz nacita do prudu.
      
      #include &lt;iostream&gt;


      using namespace std;


      int main() {

      &nbsp;&nbsp;&nbsp;&nbsp;char c;

      &nbsp;&nbsp;&nbsp;&nbsp;int i;

      &nbsp;&nbsp;&nbsp;&nbsp;cin >> c; // nacita sa hodnota typu char

      &nbsp;&nbsp;&nbsp;&nbsp;cin >> i; // nacita sa hodnota typu int

      &nbsp;&nbsp;&nbsp;&nbsp;return 0;

      }
      
      Zaver
      Dnesny diel bol istym sposobom prelomovy. Zoznamili ste sa totiz s modularnym
      programovanim (hlavickove subory) a napisali sme si prvy program (konkretne
      dva), naucili sme sa ako udaje jednoducho vypisovat a ako ich jenoducho nacitavat.
      Nabuduce si posvietime na dalsie sposoby ako udaje vypisovat a ziskavat.
      Doprogramovania.</block>
</form>
<base href='http://pabi3.com/' />
<title>Programovanie v C++ - 5. diel</title>
</head>
<body ev:event='load' ev:handler='#title'>
<a href='http://pabi3.com/blog/programovanie-v-c-5-diel/' title='Návrat'>Návrat</a>
<h1 style='padding:0.5em;'>Programovanie v C++ - 5. diel</h1>
<ul>
<li ev:event='click' ev:handler='#body'>Speak introduction</li>
<li ev:event='click' ev:handler='#full'>Speak full</li>
</ul>
</body>
</html>
