Programowanie obiektowe W2 Obsługa wejścia/wyjścia w języku C++ Przestrzeń nazw namespace Dr hab. inż. Lucyna Leniowska, prof. UR Zakład Mechatroniki, Automatyki i Optoelektroniki
Obsługa WEJŚCIA / WYJŚCIA w C++ Pracujący w języku C++ ma do wyboru korzystanie z funkcji we/wy : 1. zdefiniowanych w pliku <stdio.h> : printf() scanf() 2. zdefiniowanych w pliku <iostream> : cout cin 3.do wczytana znaków i łańcuchów można ponadto użyć funkcji typu get(),plik<stdio.h> getchar() – pobiera 1 znak z klawiatury gets()/fgets() – pobiera łańcuch znaków do wciśnięcia ENTER
Porównanie C i C++ Na ekranie zobaczymy: Przykład 1.1. #include <stdio.h> void main( ) { float x; printf(”Podaj dowolną liczbę: ”); scanf(”%f ” , &x) ; printf(” Twoja liczba : %.2f \n ” , x) ; } Przykład 1.2 #include <iostream> using namespace std; int main() { float liczba ; cout << "Wpisz liczbę rzeczywista:" ; cin >> liczba ; cout.precision(2); cout << "Twoja liczba : " << liczba; return 0; } Na ekranie zobaczymy: Wpisz liczbę rzeczywista:9.8765432 Twoja liczba : 9.9
Wypisywanie danych na ekranie cout << Za pomocą #include <iostream> dołączamy plik nagłówkowy do obsługi strumieni I/O cout Jest to specyficzne funkcja, które ma zmienną liczbę parametrów wejściowych oddzielonych znakami „<<” a parametry nie są zebrane w nawiasy „()”. Parametrami funkcji mogą być: Zwykły tekst: cout << ”Wykład z programowania obiektowego”; Zmienne: int zmienna = 1; double d = 1.5; char *str = ”Napis”; cout << zmienna << str << d << endl;
Wypisywanie danych na ekranie c.d. Przykład 1.3 #include <iostream> using namespace std; int main() { int zmienna = 1; double d = 1.5; char *str = " Napis"; cout << zmienna << str << " " <<d << endl; return 0; } Na ekranie zobaczymy: 1 Napis 1.5
Pobieranie danych od użytkownika cin >> Przykład 1.4 #include <iostream> using namespace std; int main() { int zm; double d; char *str; cout << "Podaj liczbe: "; cin >> zm; cout << "Podaj napis i liczbe:"; cin >> str >> d; cout << str << " " << d; return 0; } Za pomocą #include <iostream> dołączamy plik nagłówkowy do obsługi strumieni I/O cin Jest to specyficzne funkcja, która ma zmienną liczbę parametrów wejściowych oddzielonych znakami „>>”, a parametry nie są zebrane w nawiasy „()”. Podaj liczbe: 12 Podaj napis i liczbe : C++ 456 C++ 456
Przestrzenie nazw Podczas pracy nad programami, w których używa się wielu bibliotek można natknąć się na problem konfliktu nazw. Konflikt nazw powstaje gdy kilka obiektów, typów, funkcji, itp. ma tę samą nazwę. Rozwiązaniem jest zamknięcie nazw w "zakresach", w celu oddzielenia ich. Zakresy takie nazywamy przestrzenią nazw. Przestrzeń nazw ogranicza dostęp do elementów składowych - oprócz nazwy obiektu niezbędne jest też podanie nazwy tej przestrzeni. Istniejących funkcji ze standardu C nie można było zmienić. Można było jednak wskazać, które funkcje należą do standardu C++. Wszystkie funkcje, klasy i szablony wprowadzone z tym językiem programowania wstawiono do przestrzeni nazw std.
Dostęp do przestrzeni nazw Przykład 1.5 #include <iostream> int main () { std::cout << "Wyklad z C++" << std::endl; return 0; } Wyrażenie std:: pojawiające się przed cout i endl oznacza, że wspomniane obiekty chcemy pobrać z przestrzeni std
Dostęp do przestrzeni nazw c.d. Przykład 1.6 #include <iostream> int main () { int a, b; std::cout << "Podaj dwie liczby a i b" << std::endl; // wypisujemy komunikat std::cout << "podaj a: "; std::cin >> a; std::cout << "podaj b: "; std::cin >> b; // wypisujemy sumę dwóch liczb std::cout << "a+b= " << a+b << std::endl; return 0; } Podaj dwie liczby a i b podaj a: 25 podaj b: 5 a+b= 30
Dostęp do przestrzeni nazw c.d. Przykład 1.7 #include <iostream> using namespace std; int main () { cout << "Wyklad C++" << endl; return 0; } Za pomocą słów kluczowych: using namespace std; informujemy kompilator, że chcemy aby wszystkie funkcje, klasy i szablony należące do przestrzeni nazw std nie wymagały przedrostka.
Dostęp do przestrzeni nazw c.d. #include <iostream> using std::endl; int main () { std::cout << "Wykład z C++" << endl; return 0; } Za pomocą słów kluczowych: using std::endl; informujemy kompilator, że jeżeli będziemy używać w kodzie endl to będziemy mieli na myśli właśnie to pochodzące z przestrzeni std
Tworzenie własnej przestrzeni nazw Definiowanie: Przestrzeń nazw tworzymy za pomocą słowa kluczowego namespace, ograniczając jej zawartość klamrami. Można uzupełniać stworzoną przestrzeń nazw o kolejne funkcje w innym miejscu programu. Stosowanie: Za pomocą słów kluczowych: using namespace Nazwa; informujemy kompilator, że zastosowanych funkcji należy szukać w przestrzeni nazw Nazwa Przykład: namespace Obliczenia { int dodaj (int a, int b) return a+b; } int odejmij (int a, int b) return a-b; int pomnoz (int a, int b) return a*b; int podziel (int a, int b) return a/b;
Tworzenie własnej przestrzeni nazw c.d. #include <iostream> namespace Obliczenia { int dodaj (int a, int b); int odejmij (int a, int b); } using namespace std; int main () cout << Obliczenia::dodaj(10, 20) << endl; return 0; //Wariant I namespace Obliczenia { int dodaj (int a, int b) return a+b; } int odejmij (int a, int b) return a-b; //Wariant II int Obliczenia::dodaj (int a, int b){ return a+b; } int Obliczenia::odejmij (int a, int b){ return a-b;
Sprawdzanie poprawności wprowadzonych danych #include <iostream> int main() { float a; int b; std::cout << "Podaj liczbe rzeczywista: "; std::cin >> a; std::cout << "Podaj liczbe calkowita: "; std::cin >> b; std::cout << "Liczba a = " << a << std::endl; std::cout << "Liczba b = " << b << std::endl; return 0; } l Podaj iczbe rzeczywista: 2.5 Podaj liczbe calkowita: 25 Liczba a = 2.5 Liczba b = 25 Gdy użytkownik zrobi błąd: Podaj liczbe rzeczywista: 3qqq Podaj liczbe calkowita: Liczba a = 3 Liczba b = 0
Sprawdzanie poprawności wprowadzonych danych c.d. #include <iostream> int main() { float a; int b; std::cout << "Podaj liczbe rzeczywista: "; std::cin >> a; std::cout << "Czy wczytano? " << std::cin.good() << std::endl; std::cout << "Czy jest pomylka? " << std::cin.fail() << std::endl; std::cout << "Podaj liczbe calkowita: "; std::cin >> b; std::cout << "Liczba a = " << a << std::endl; std::cout << "Liczba b = " << b << std::endl; return 0; }
Na ekranie zobaczymy: Podaj liczbe rzeczywista: 23.5 Czy wczytano? 1 Czy jest pomylka? 0 Podaj liczbe calkowita: 55 Liczba a = 23.5 Liczba b = 55