Iostream

Słowem wprowadzenia



iostream (czytaj: aj-ou-strim) jest to standardowa biblioteka obsługująca operacje wejścia i wyjścia (ang. Input/Output, w skrócie I/O) przeznaczona dla języka C++. Ma ona postać pliku dołączanego do naszego programu za pomocą dyrektywy preprocesora #include (czytaj: hasz-inklad). Więcej na temat strumieni → dalsza część artykułu.

Zapytacie, czemu operacje I/O nie są wbudowane w język C++? Otóż umożliwia to przenoszenie kodu źródłowego między platformami sprzętowymi i systemowymi. Po przekompilowaniu, program napisany pod komputer PC, będzie działał bezbłędnie na komputerze Apple Macintosh.



Czym jest strumień


Strumieniem nazywamy ciąg danych "poruszający się" w jedną z dwóch stron. Jeżeli dane idą od urządzenia wejścia (np. klawiatury) do urządzenia wyjścia mówimy, że mamy doczynienia ze strumieniem wejściowym. Jeżeli dane idą od urządzenia wyjścia (np. monitora), wtedy mamy doczynienia ze strumieniem wyjściowym.

Podobnie jest z operacjami I/O na plikach binarnych. Gdy sygnały (cyfra 1) oraz przerwy w tychże sygnałach (cyfra 0) idą w kierunku wyjścia mówimy, że plik jest zapisywany. Gdy natomiast jest odwrotnie mówimy o operacji nazywanej odczytem. I tyle.

Do rzeczy...


A teraz do rzeczy. Każdy kurs programowania zaczyna się od wyświetlenia na ekranie tekstu "Hello World". Każdy język programowania ma własne sposoby wyświetlania tekstu. Język C++ ma w zanadrzu bibilotekę iostream. Zawiera ona definicje obiektów obsługujących wejście i wyjście. Poniżej znajdziecie listę czterech podstawowych obiektów I/O.



  • cin - (czytaj: si-in) obiekt obsługujący prowadzanie danych z klawiatury.


  • cout - (si-aut) powszechnie używany obiekt służący do wypisywania na ekranie danych.


  • cerr - (si-err) obiekt obsługujący niebuforowane wyprowadzanie danych na standardowe urządzenie wyjścia dla wydruku błędów (innymi słowy ekran monitora). Wyjście błędów jest niebuforowane, przez co wszystko co wysyłamy do cerr zostanie natychmiast wypisane na ekranie, bez oczekiwania na wypełnienie bufora.


  • clog - (si-log) obiekt obsługujący buforowane wyprowadzanie danych. Często wyjście to jest przekierowywane do pliku log.


Zacznijmy od omówienia obiektu cout. Zaczynam od niego, bo właśnie to on jest najczęściej wykorzystywany do napisania pierwszego programu. Poniżej znajduje się przykład, który można znaleźć w każdej książce do programowania w C++.



#include <iostream>

int main()
{
       cout << "Hello World!!!";
       return 0;
}


Przykład ten jest dobrze znany posiadaczom jakiejkolwiek książki do programowania w C++, której zawartość jest zgodna ze standardem ANSI/ISO. Nas jednak nie interesuje wyświetlenie tekstu, ale dzięki czemu jest ono możliwe.

Program zaczyna się od linii zarezerwowanej dla najintensywniej używanej dyrektywy preprocesora - #include. Dodaje ona do naszego programu zawartość pliku, którego nazwa podawana jest bezpośrednio po dyrektywie. W tym wypadku dyrektywa załącza plik iostream. Bez zawartości tego pliku nie moglibyśmy korzystać z całego tego dobra, jakie daje nam obiekt cout. Tym dobrem jest możliwość wypisywania na ekranie danych w postaci wartości zmiennych lub po prostu podanego przez nas tekstu.

A teraz drugi przykład. Pisząc ten program zastosowałem bibliotekę I/O oraz zmienne. Z jasnej przyczyny ten program nie obejdzie się bez zastosowania komentarzy.

#include <iostream> // zalaczenie pliku "iostream"

// definicja funkcji main()
int main()
{
        int MyInteger; // deklaracja zmiennej typu int
       
        cout << "Prosze wpisać liczbe calkowita: "; // wyswietla komunikat
        cin >> MyInteger; // mechanizm obslugujacy wejscie z klawiatury i przypisujacy otrzymana wartosc zmiennej MyInteger
       
        cout << "Wartosc miennej MyInteger to " << MyInteger; // wyswietlenie nowej wartosci zmiennej MyInteger;

        <return 0; // zwrot wartosci 0, informujacej system, ze program zostal wykonany poprawnie
}


I tyle. Mam nadzieję, że wszystko jest zrozumiałe dla początkujących programistów dopiero rozpoczynających swą wielką przygodę. Z góry przepraszam za będy spowodowane tym, że trochę zbyt szybko piszę. To nawyk wyciągnięty z kilku lat programowania pod platformę Win32 API.

Wyznaję zasadę, że każdy może zacząć programować, ale trzeba tego chcieć. Bardzo. Artykuł ten jest przeznaczony dla początkujących, co nie oznacza, że zaawansowani nie mogą go czytać. Spodziewam się natomiast, że zawarta tutaj wiedza może być dla nich niewystarczająca. Dziękuję bardzo za lekturę.
Informacje
Ostatnia modyfikacja 26-08-2010 19:11 Ostatni autor PaparazziPoOperacji
Ilość wyświetleń 1939 Wersja 2
Komentarz
olo16 dnia 01-09-2010 07:56
Ale nawet pomijając przestrzenie - w ostatnim kodzie jest "<return 0;" - co tu robi ten "<" ? Mi to wygląda na literówkę, a kompilator takich nie toleruje...

Ale żeby nie było że wszystkiego się czepiam - dla początkujących chyba napisane dobrze. No i jeszcze oprócz plików ii stringstream przydałoby się:
1. Przeciążanie operatorów << itp. dla własnych klas (początkujęcego w pisaniu programów nie będzie to obchodzić, a przyda się początkującemu w pisaniu klas).
2. Tworzenie własnych klas dziedziczących z iostream - w końcu komuś mogą być potrzebne własne strumienie - kto powiedział, że mają się one ograniczać do ekranu/klawiatury, plików i konwersji stringów? Ja z chącią zobaczyłbym strumienie np. dla socketów.
PaparazziPoOperacji dnia 28-08-2010 17:51
1. Na pewno to co ja napisałem jest przynajmniej trochę lepsze niż wersja 1.0.
2. Tak, to ja kompilowałem.
3. Chyba na koniec napisałem, że napisany dla początkujących?!
4. Sprawia takie wrażenie, ponieważ użyłem mniej skoplikowanych objaśnień.
5. Pracuje juz nad plikami i stringstream'em.

Zgadzam się, że zapomniałem o przestrzeni nazw. W tej sprawie wygrałeś, olo16. Zwracam honor. Gdy uczyłem się programowania, używałem starych i niedoskonałych kompilatorów. Nie pamiętam, jak nazywał się ten, którym to kompilowałem, ale wiem, że nie obsługiwał przestrzeni nazw.

Na deser dodam jeszcze, że pracuję już nad wersją 3.0. Ta wersja ma być rozszerzona o pliki, stringstream oraz bardziej zaawansowane słownictwo. Nie martw się więc o wersję 3.0. Opracowanie tego artykułu zajmie mi trochę czasu. Proszę o cierpliwość.
olo16 dnia 27-08-2010 10:09
Co do przytoczonych kodów: autor to kompilował? To wywali error! Albo za każdym razem pisze się std::cout, albo po zaincludowaniu using namespace std;

Artykuł na niskim poziomie, napisany dla początkujących, ale niestety sprawia wrażenie jakby był pisany też przez początkującego. Niefachowe wujaśnienia podstaw.

I przydałoby się to rozszerzyć o pliki i stringstream.
PaparazziPoOperacji dnia 26-08-2010 17:54
Panowie dajcie spokój. Jestem już w trakcie pracy nad rozszerzeniem tego "artykułu", jeżeli można nazwać to artykułem. Żeby napisać artykuł na temat standardowej biblioteki wejścia i wyjścia dla języka C++ potrzeba co najmniej 1,5 roku biegłej nauki. Tak dla informacji.

@pisak, weź się do pracy nad nauką programowania. Po tym co widzę i na co patrzeć już nie mogę, mogę uznać, że dla ciebie idealnym językiem programowania jest Microsoft SmallBasic. Gdybyś pytał, co to jest za język to informuję - jest to język złożony zaledwie z 15 słów kluczowych. Służy on do nauki programowania na poziomie 2 klasy podstawówki. Taki będzie dla ciebie idealny. Programując w nim będziesz mógł wykazać się takim samym minimalizmem, jaki pokazałeś tutaj.
Patryk27 dnia 22-09-2009 16:19
Iostream jest po prostu biblioteką która umożliwia korzystanie ze strumieni wyjścia/wejścia np. cout lub cin.
można się roześmiać
Patryk27 dnia 09-09-2009 13:42
To jest nie warte miejsca na serwerze
Zgadzam się z rincewind, trzeba napisać czym są strumienie itd.
Ja się nie znam na C++ więc nie napiszę ;)
SebaZ dnia 01-09-2009 20:45
@pisak - dostałeś swoją odpowiedź od rincewind
rincewind dnia 31-08-2009 19:10
Wypadałoby napisać, czym są strumienie, jak z nich korzystać, opisać klasy istream i ostream, opis flag strumieni, przestrzeń nazw ios_base (formatowanie wyjścia etc.)... To tak na początek. To jedno zdanie nie dość, że nie niesie ze sobą żadnych informacji, to jeszcze jest obrzydliwe interpunkcyjnie.

@pisak, przejrzyj sobie inne artykuły na 4p i porównaj swoje jedno wypocone zdanko mające niby opisać tak rozległy temat. Już mój komentarz jest kilkukrotnie dłuższy od rzekomego "artykułu".
pisak dnia 31-08-2009 17:32
co mam jeszcze napisać jeśli jesteś taki mądry to się nad tym rozpisz
SebaZ dnia 31-08-2009 12:48
To chyba jakiś żart, a nie tekst

Copyright © 2000-2006 by Coyote Group 0.9.3-pre3
Czas generowania strony: 0.0312 sek. (zapytań SQL: 9)