Programovanie v C++ - 5. diel

Seriál o programovaní v programovacom jazyku C++. V dnešnom, už piatom pokračovaní si napíšeme náš prvý skutočný program a naučíme sa ako získavať dáta zo štandartného vstupu a ako dáta vypisovať a zoznámime sa s hlavičkovými súbormi.

Hlavičkové súbory


Každý väčší program sa raz dostane do štádia, keď by už nebolo vhodné ho mať celý napísaný v jedinom zdrojovom súbore a budete chcieť program rozdeliť do súborov viacerých. Navyše budete ešte potrebovať, aby niektoré premenné alebo funkcie boli dostupné len pre určité súbory a pod. Vtedy prichádzajú na rad hlavičkové súbory.
Predstavte si nasledujúcu situáciu.
      // main.h

      int i;
      
      // main.cpp

      #include "main.h"


      int main() {

          i = 10;

          return 0;

      }
      
Príkazom #include "main.h" sme spôsobili, že obsah súboru main.h bude sprístupnený aj pre súbor main.cpp. Preto môžeme pracovať s premennou i, ktorú sme deklarovali v súbore main.h aj napriek tomu, že v súbore main.cpp akoby neexistovala.
Skúste si ale predstaviť, že by sme premennú i potrebovali použiť aj v inom súbore, napríklad main2.cpp.
      // main2.cpp

      #include "main.h"


      void func() {

          i = 10;

      }
      
Tu by už nastal problém, pretože by sme globálnu premennú i akoby deklarovali dva krát (v súbore main.cpp a v súbore main2.cpp). Situáciu vyriešime pomocou kľúčového slova extern.
      // main.h

      extern int i;


      // main.cpp

      #include "main.h"


      int i;

      ...      
      
Keď premennú "i" zapíšeme v súbore main.h ako externú, v podstate tým kompilátoru povieme, že premenné "i" deklarujeme v nejakom inom súbore, pričom súbory, ktoré budú includovať main.h, budú môcť premennú i využívať. Ale ako som už napísal, musíme je v niektorom zo súborom deklarovať, resp. definovať.
      // main.cpp

      #include "main.h"

      int i;

      ...
      
Teraz už bude všetko v poriadku a globálnu premennú "i" budeme môcť použiť v každom súbore, ktorý bude hlavičkový súbor main.h inkludovať.

Vypisovanie údajov


Teraz už nadišiel čas napísať si náš prvý program. Býva zvykom napísať na obrazovku "Hello, World!", ja sa ale držím vlastných zvykov. Na to, aby sme mohli na obrazovku vypisovať text, budeme musieť inkludovať hlavičkový súbor iostream. Na vypisovanie údajov (textu) nám bude slúžiť dvojica dátových prúdov cout a endl.
Syntax: (std::)cout << _prud1_ ... << _prudN_ [ << (std::)endl ]
Príkaz endl spôsobí, že sa skočí na ďalší riadok a "spláchne" sa pamäť alokovaná pre cout. Naučte sa preto endl používať.
      #include <iostream>


      int main() {

          std::cout << "Ďakujeme ti za tento seriál, ribi!" << std::endl;

          return 0;

      }
      
Všimnite si, že som napísal std::cout a std::endl namiesto cout a endl. Urobil som tak preto, lebo cout a endl sú súčasťou tzv. namespace. O tom ale až niekedy neskôr.
Taký namespace slúži ako akýsi rozlišovač v prípade, že potrebujete mať napr. viac premenných s rovnakým názvom. K premenným z namespace-u potom pristupujeme tak, že zadáme meno namespace-u, potom operátor "::" a meno premenej, ktorú potrebujeme.
      int i;

      namespace name{

          int i;

      };

      ...

      i = 0; // globálna premenná i

      name::i = 0; // namespace

      
Keď sa vám v určitej časti kódu nebude chcieť vypisovať name::i, tak jednoducho môžete napísať príkaz using namespace name. Ten spôsobí, že vám bude stačiť napísať len "i" (nie name::i) a kompilátor automaticky pochopí, že chcete pristupovať k namespace-u.
Náš program na vypisovanie údajov bude teda po úprave vyzerať nasledovne.
      #include <iostream>


      using namespace std;


      int main() {

          cout << "Ďakujeme ti za tento seriál, ó, veľký ribi!" << endl;

          return 0;

      }
      

Čítanie z klávesnice


Na čítanie z klávesnice použijeme dátový prúd cin (takisto sa nachádza v hlavičkovom súbore iostream).
Syntax: (std::)cin >> _premenna_;
Pomocou cin môžeme načítať prakticky akýkoľvek typ premennej, čiže int, char, float a pod. Vami zadaný text v programe musíte potvrdiť stlačením klávesy Enter. Až potom sa totiž načíta do prúdu.
      #include <iostream>


      using namespace std;


      int main() {

          char c;

          int i;

          cin >> c; // načíta sa hodnota typu char

          cin >> i; // načíta sa hodnota typu int

          return 0;

      }
      

Záver


Dnešný diel bol istým spôsobom prelomový. Zoznámili ste sa totiž s modulárnym programovaním (hlavičkové súbory) a napísali sme si prvý program (konkrétne dva), naučili sme sa ako údaje jednoducho vypisovať a ako ich jenoducho načítavať. Nabudúce si posvietime na ďalšie spôsoby ako údaje vypisovať a získavať. Doprogramovania.
Alternatívne verzie: Text PDF Voice
Autor: Ribi · Kategória: Programovanie · Dátum: 02.10.2005 17:50

Komentáre

#1 Andrej Gajdoš E-mail
16.07.2006 10:42
Ahoj!

Dovolil by som si iba taký malý komentár, hoci som kod nemusel ani kompilovať, je mi vopred jasné, pretože programujem v C++, že kebyže skompilujete

#include <iostream>

using namespace std;

int main() {
cout << "Ďakujeme ti za tento seriál, ó, veľký ribi!" << endl;
return 0;
}
[/code]

dostanente nečakný výstup, teda namiesto diakritiky budete vidiet rozne znaky!! Samozrejme, tento problém je možné vyriešiť věľmi jednoducho, pomocou ANSCII tabuľky, kde si stačí nájsť prislúšné znaky a príslušnú hodnotu, a to uložiť do do premennej typu char, a potom pomocou operatoru vystupu << vypisat obsah premennej! Kompilátor implementuje znaky, a text bude v poriadku[laugh]!

S pozdravom
AG

#2 ribi Web E-mail
16.07.2006 17:46
Áno, poznámka je na mieste. Ani som si to neuvedomoval, pretože v praxi vždy používam UNICODE a makro TEXT a vzhľadom na primitívnosť problematiky článku som na to ani len neprihliadol a jednoducho som všetko napísal len z hlavy.[laugh]

#3 Andrej Gajdoš
16.07.2006 20:36
Dovolil som si ten kod upravit, aby sa zobrazoval tak, ako sa má:-)


#include <iostream>

int main()
{
using std::cout;
using std::cin;
using std::endl;

// uloženie znakov z ASCII tabuľky
char prvy_znak =(char) 210; // Ď
char druhy_znak =(char) 160; // á
char treti_znak =(char)162; // ó
char stvrty_znak =(char)150; // ľ
char piaty_znak =(char)236; // ý

// vypíšeme text na obrazovku
cout << prvy_znak << "akujeme Ti za tento seri" <<druhy_znak << "l," << treti_znak << ",ve" << stvrty_znak << "k" << piaty_znak << " ribi!" << endl;

// pockame na stisknutie nejake klavesy
getchar();
// vrátime hodnotu fcii main()
return 0;
}


Kompiloval som to vo MS Visual C++ 6.0, a vystup bol presne taký, aký som chcel:-P Pouzil som na to znaky z ASCII tabulky, ktoru mozete najst na stranke http://www.gjh.sk/~3sismisova/ascii.php

Pozor! Pokial budete pouzivat nejaek inu ASCII tabulku, je dost mozne, ze vystup bude obsahovat uplne ine znaky, ako ste zadali!! Mne osobne sa velmi osvedcila prave tato ASCII tabluka!

S pozdravom
AG[laugh]

#4 Steev E-mail
23.07.2006 20:34
Prosim poradte mi kde najdem prirucku k praci v Visual C++ 4,0 programoval som chvilku v programe Dev C++ ale chcel by som vediet programovat aj objektovo. Hodilo by sa mí to k Soč. Diki

#5 autor E-mail
20.07.2008 23:57
preco serial skoncil ??? chcel som si precitat aj dalsie diely ale nenasiel som ich tu :-(

Osobné údaje
Captcha
Odpíšte text z obrázku. Rozlišujú sa malé a veľké písmená.
Obsah
Možnosti