Biblioteki

Załączanie plików

Program w C++ może się składać z wielu plików. Jeśli do danego pliku chcemy dołączyć inny, używamy dyrektywy #include, której parametr jast nazwą dołączanego pliku. Nazwą tą podajemy w nawiasach <> jeśli chodzi o bibliotekę standardową (dostarczoną przez C++) lub w nawiasach "" w przypadku gdy plik został napisany samodzielnie, np.
#include <iostream>
#include "moja.h"

Biblioteki standardowe

Z wielu funkcji i udogodnień można korzystać dopiero po dołączeniu do programu bibliotek standardowych. Oto niektóre z nich: i wiele innych. Dokładne informacje dotyczące funkcji zadeklarowanych w bibliotekach można znaleźć w plikach pomocy Visual C++.

Tworzenie własnych bibliotek

Napisane przez sobie funkcje można załączyć do programu używająć bibliotek. W tym celu należy:
  1. Stworzyć plik nagłówkowy z rozszerzeniem .h zawierający deklaracje udostępnianych funkcji, np. plik "bib.h" o treści
    int max(int a, int b);
    int dlugosc(const char* s);
  2. Stworzyć plik żródłowy (rozszerzenie .cpp) zawierający definicje tych funkcji, np. plik "bib.cpp" o treści
    #include "bib.h"

    int max(int a, int b) {
       if(a>b)
          return a;
       else
          return b;
    }

    int dlugosc(const char* s) {
       int i;
       for(i=0; s[i]; ++i);
       return i;
    }
  3. W programie możemy uzyskać dostęp do tych funkcji przy pomocy
    #include "bib.h"

Dostęp do plików

Do czytania i pisania na plikach służą klasy zadeklarowane w bibliotece fstream.

Czytanie plików

Żeby odczytać plik należy zadeklarować obiekt (zmienną) typu ifstream następująco
ifstream nazwa_strumienia(nazwa_pliku);
Następnie można z tego strumienia czytać w sposób analogiczny jak ze strumienia cin. Oprócz operatora >> można korzystać z metod (funkcji) m.in. open (służy do otwierania strumienia jeśli nie został podany parametr przy deklaracji), get, getline (do wczytywania pojedynczych znaków oraz całych linii), eof (sprawdza, czy osiągnięto koniec pliku) oraz fail (sprawdza, czy następna operacja może zakończyć się powodzeniem). Pełną listę funkcji można znaleźć w plikach pomocy. Oto funkcja, która wypisuje na ekran zawartość pliku o podanej nazwie:
void fileToScreen(const char* name) {
   ifstream ifile(name);
   while(ifile) { // lub !(ifile.eof())
      char c;
      ifile.get(c);
      cout << c;
   }
}

Pisanie do plików

Analogicznie, do pisania do pliku służą obiekty klasy ofstream. Tworzy się je np. na jeden z poniższych sposobów:
ofstream nazwa_strumienia(nazwa_pliku);
ofstream nazwa_strumienia(nazwa_pliku, ios::app);
w zależności od tego, czy chcemy pisać w pliku od początku czy dopisać fragment na końcu. Zestaw dostępnych metod jest podobny - z tą różnicą, że zamiast funkcji get używamy put. Oto funkcja, która wpisuje (dopisuje) do pliku dane wczytane z klawiatury:
void screenToFile(const char* name, bool append=false) {
   ofstream ofile;
   ofile.open(name, append ? ios::app : ios::out);
   char s[100];
   do {
      cin.getline(s, 100);
      ofile << s << endl;
   } while(s[0]);
}

Parametry programu

Przy wywołaniu programu można podać jego argumenty - najprościej jest to osiągnąć uruchamiając program z wiersza poleceń, np. wpisując
>kopiuj.exe in.txt out.txt
Żeby uzyskać w programie dostęp do argumantów, należy zadeklarować funkcję main następująco:
int main(int argc, char** argv)
Liczba argumentów będzie zapisana w zmiennej argc, natomiast same parametry są zapisane w argv (jest to tablica napisów, która ma argc elementów). Pierwszy argumentem jest zawsze nazwa wykonywanego pliku. Oto przykładowy program, który wypisuje na ekran argumentu wywołania:
#include <iostream>

int main(int argc, char** argv) {
   for(int i=0; i<argc; ++i)
      std::cout << i << " " << argv[i] << std::endl;
}