Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 1
Literatura Literatura podstawowa: Prata Stephen. Szkoła programowania. Język C++. Wydanie V. Helion, 2006. Andrzej Stasiewicz. C++. Ćwiczenia praktyczne. Wydanie III. Helion, 2011.
C++ - poczatek Program w języku C++, podobnie jak w języku C, to zbiór funkcji, a każda funkcja to zbiór instrukcji. Plik zawierajacy program w jezyku C++ jest plikiem tekstowym i powinien mieć rozszerzenie cpp (typowe dla kompilatorów firmy Microsoft, Borland) lub CC (typowe dla kompilatorów firmy Sun) lub cc. Kompilacja: g++ -Wall plik.cpp -o plik_wynikowy. Obecnie obowiazujacy stndard: ISO/IEC 14882:2011.
C++ - poczatek Program w języku C++, podobnie jak w języku C, to zbiór funkcji, a każda funkcja to zbiór instrukcji. Plik zawierajacy program w jezyku C++ jest plikiem tekstowym i powinien mieć rozszerzenie cpp (typowe dla kompilatorów firmy Microsoft, Borland) lub CC (typowe dla kompilatorów firmy Sun) lub cc. Kompilacja: g++ -Wall plik.cpp -o plik_wynikowy. Obecnie obowiazujacy stndard: ISO/IEC 14882:2011. Oficjalna strona THE C++ STANDARDS COMMITTEE: http://www.open-std.org/jtc1/sc22/wg21/.
Komentarze Komentarze w C++ sa takie same jak w języku C: jednolinijkowy - zaczyna się od // i kończa się wraz z końcem wiersza. wielolinijkowy - zaczyna się od /* i kończy się na */
Standardowe typy danych Nazwy standardowych typów danych w C++ sa takie same jak w C - ich rozmiary moga się już różnić: Typy całkowite: short, int, long, unsigned short, unsigned int, unsigned long Typ znakowy: char Typy rzeczywiste: float, double, long double
Nazwy plików nagłówkowych Kompilatory C++ zawsze sa dostarczane wraz z szeregiem plików nagłówkowych, z których każdy obsługuje pewna grupę narzędzi. Zgodnie z tradycja języka C plikom nagłówkowym nadawano rozszerzenie.h. Na przykład plik nagłówkowy C math.h zawierał deklaracje funkcji matematycznych. Poczatkowo w C++ sytuacja wygladała tak samo, ale ostatnio zmieniono to. Obecnie rozszerzenie.h zachowano dla starszych plików nagłówkowych C (które moga być cały czas używane), natomiast pliki nagłówkowe samego C++ nie maja rozszerzenia w ogóle. Istnieja też pliki nagłówkowe C, które zostały zamienione na pliki nagłówkowe C++. Plikom tym zmieniono nazwę, odrzucajac rozszerzenie.h oraz poprzedzajac ich nazwy litera c (od języka C). Na przykład w C++ staremu plikowi nagłówkowemu math.h odpowiada plik cmath.
Wejście i wyjście w C++ W C++ można używać funkcji wyjścia/wejścia z języka C - printf(),scanf() i im podobnych - wystarczy w tym celu dołaczyć standardowy nagłówek języka C - stdio.h. Natomisat kiedy w programie chcemy użyć zwykłych narzędzi C++ do obsługi wejścia i wyjścia, konieczne jest dodanie dwóch następujacych wierszy: #include <iostream> using namespace std;
Uwaga o zgodności ze standardem W przypadku użycia starszego kompilatora zamiast dyrektywy #include <iostream> należy użyć dyrektywy #include <iostream.h> oraz pominać wiersz using namespace std.
Uwaga o zgodności ze standardem Obsługa wejścia-wyjścia w C++ opiera się na kilku definicjach z pliku iostream: Definicję standardowego strumienia wyjścia (ekran monitora) cout Definicję standardowego strumienia wejścia (klawiatura) cin Definicję standardowego strumienia błędów (ekran monitora) cerr
Uwaga o zgodności ze standardem #include <iostream> using namespace std; int main() { cout << "Zabawe C++ czas zaczac!"; cout << endl; cout << "Zobaczysz spodoba Ci się!" << endl; return 0; }
Uwaga o zgodności ze standardem #include <iostream> using namespace std; int main() { cout << "A teraz coś wczytamy!"; cout << endl; int a; cin >> a; cout << "Przeczytałeś liczbę całkowitą: " << a << "!" << endl; return 0; }
Przestrzenie nazw Przestrzeń nazw to nowa cecha języka C++, która ma pomagać pisać programy składajace się z kodu pochodzacego od różnych dostawców. Trzeba się liczyć z tym, że w dwóch nabytych pakietach moga istnieć tak samo nazywajace się funkcje, np. funkcja wanda(). Jeśli użyjemy funkcji wanda(), kompilator nie będzie wiedział, o która nam chodzi. Przestrzeń nazw pozwala zgrupować ze soba wszystkie moduły jednego dostawcy i rozwiazać problem z wanda :).
Przestrzenie nazw Załóżmy, że firma Kowalski umieszcza swoje definicje w przestrzeni nazw Kowalski. Wtedy ich funkcja wanda() będzie się nazywała Kowalski::wanda(). Analogicznie przestrzeń nazw Nowak może również zawierać funkcję wanda(), ale w tym przypadku funkcja ta będzie nazywała się Nowak::wanda(). Mojac do dyspozycji dwie przestrzenie nazw Kowalski i Nowak, program będzie mógł używać obu funkcji: Kowalski::wanda( Wand to ta co nie chciała... ; // funkcja z przestrzeni nazw Kowalski Nowak::wanda( Nowak & Nowak ); // funkcja z przestrzeni nazw Nowak
Standardowa przestrzeń nazw Klasy, funkcje i zmienne będace standardowymi składnikami kompilatora C++ trafiły do przestrzeni nazw std Dzieje się tak w wersjach plików nagłówkowych nieposiadajacych rozszerzeń. Na przykład, zmienna cout używana do przekazywania danych na zewnatrz, zdefiniowana w iostream, tak naprawdę nazywa się std::cout, zmienna cin używana do pobierania danych z zewnatrz to tak naprawdę std::cin, a manipulator endl stosowany do wprowadzania nowego wiersza, to tak naprawdę std::endl.
Standardowa przestrzeń nazw #include <iostream> int main() { std::cout << "Zabawe C++ czas zaczac!"; std::cout << std::endl; std::cout << "Zobzczysz spodoba Ci się!" << std::endl; return 0; }
Dyrektywa using Aby używać nazw z przestrzeni std bez dopisywania przedrostka std::, wystarczy napisać poniższa instrukcję: using namespace std; Dyrektywa using powoduje bowiem, że wszystkie nazwy z przestrzeni std staja się dostępne. Obecnie przyjmuje się, że jest to podejście zbyt wygodnickie; należy raczej udostępnić te nazwy, których będziemy później używać, stosujac inna formę dyrektywy using: using std::cout; // udostępnienie cout using std::endl; // udostępnienie endl using std::cin; // udostępnienie cin
Dyrektywa using #include <iostream> int main() { using namespace std; cout << "Zabawę z C++ czas zacząć!"; cout << endl; cout << "Nie pożałujesz!" << endl; return 0; } albo #include <iostream> int main() { using std::cout; using std::endl; cout << "Zabawę z C++ czas zacząć!"; cout << endl; cout << "Nie pożałujesz!" << endl; return 0; }
Rozmiary standardowych typów danych - przykład #include <iostream> using namespace std; int main(void) { cout << "char = "<< sizeof(char)<< "\n"; cout << "string = "<< sizeof(string)<< "\n"; cout << "short = "<< sizeof(short)<< "\n"; cout << "int = "<< sizeof(int)<< "\n"; cout << "long = "<< sizeof(long)<< "\n"; cout << "long int= "<< sizeof(long int)<< "\n"; cout << "long long= "<< sizeof(long long)<< "\n"; cout << "long long int= "<< sizeof(long long int)<< "\n"; cout << "float = "<< sizeof(float)<< "\n"; cout << "double = "<< sizeof(double)<< "\n"; cout << "long double = "<< sizeof(long double)<< "\n"; return 0; }
Wyprowadzanie danych różnych typów - przykład #include <iostream> using namespace std; int main(void) { int i = 34; cout << "i = "; cout << i; cout << "\n"; long long l = 100000; cout << "l = " << l << "\n"; float f = 321.434; cout << "f = " << f << "\n"; double d = 321.434; cout << "d = " << d << "\n"; char c = a ; cout << "c = " << c << "\n"; const char *wc = "napis"; cout << "wc = " << wc << "\n"; string s = "napis w C++"; cout << "s = " << s << "\n"; return 0; }
Wyprowadzanie danych różnych typów - przykład #include <iostream> #include <iomanip> using namespace std; int main(void) { float f = 321.434; cout << "f = " << f << endl; cout << "f = " << setw(10) << f << endl; double d = 321.434; cout << "d = " << d << endl; cout << "d = " << setw(10)<< d << endl; return 0; }
Operatory arytmetyczne i struminie #include <iostream> int main() { using namespace std; int marchewka = 25; cout <<"Mam "<< marchewka <<" marchewek."<< endl; marchewka = marchewka - 1; cout <<"Chrum. Teraz mam "<< marchewka <<" marchewki."<< endl; marchewka -= 1; cout <<"Chrum. Teraz mam "<< marchewka <<" marchewki."<< endl; marchewka--; cout <<"Chrum. Teraz mam "<< marchewka <<" marchewki."<< endl; --marchewka; cout <<"Chrum. Teraz mam "<< marchewka <<" marchewki."<< endl; cout <<"Chrum. Teraz mam "<< marchewka-- <<" marchewki."<< endl; cout <<"Chrum. Teraz mam "<< --marchewka <<" marchewki."<< endl; return 0; }
Wprowadzanie danych #include <iostream> int main() { using namespace std; int carrots; cout << "Ile masz marchewek?" << endl; cin >> carrots; cout << "Proszę, oto jeszcze dwie. "; carrots = carrots + 2; cout << "Teraz masz " << carrots << " marchewek." << endl; return 0; }
Wprowadzanie danych #include <iostream> int main() { using namespace std; int carrots; cout << "Ile masz marchewek?" << endl; cin >> carrots; cout << "Proszę, oto jeszcze dwie. "; carrots += 2; cout << "Teraz masz " << carrots << " marchewek." << endl; return 0; }
Operatory Operatory arytmetyczne takie jak w C: + - * / % Operatory przypisania takie jak w C: = += -= *= /= %= Operatory bitowe takie jak w C: & ^ ~ << >> Operatory porownania takie jak w C: < > <= >=!= == Operatory logiczne takie jak w C: &&!
Instrukcje warunkowe, wyboru i iteracyjne Instrukcja warunkowa if - else, instrukcja wyboru switch, oraz instrukcje iteracyjne while, do-while i for maja w języku C++ taka sama składnię i semantykę jak w C. Instrukcje break i continue maja w języku C++ taka sama składnię i semantykę jak w C.
Wskaźniki Wskaźniki maja w języku C++ taka sama składnię i semantykę jak w C. Arytmetyka wskaźników jest taka sama jak w C. Zwiazek tablic i wskaźników jest taki sama jak w C.
Tablice i funkcje Definicje i używanie tablic jest takie samo jak w C. Definicje i używanie funkcji jest takie samo jak w C. Dodatkowo wprowadzone zostaja jednak funkcje przeciażone, szablony funkcji oraz nowy sposób przekazywania argumentów - przez referencje. O tym na późniejszych wykładach.
Struktury Definicja, semantyka i używanie struktur jest podobne jak w C. Natomiast dodatkowo wprowadza się pojęcie klasy, szblonu klasy, dziedziczenia i polimorfizmu. O tym na późniejszych wykładach.
Pliki Pliki w języku C++ można oczywiście obsługiwać metodami z języka C. Istnieje jednak rozwi azanie typowe tylko dla C++ i jest oparte o strumienie. O tym na późniejszych wykładach.