1 C++ Paweł Rzechonek Instytut Informatyki Uniwersytetu Wrocławskiegosemestr letni 2011/2012
2 Organizacja zajęć Cel Nauka programowania obiektowego w języku C++.Umiejętność wykorzystania wybranych klas z biblioteki standardowej. Wymagania Umiejętność programowania strukturalnego w języku ANSI C. Znajomość podstawowych struktur danych (tablice, listy, drzewa, grafy).
3 Organizacja zajęć Wykład Wykładowca: Paweł RzechonekKontakt mailowy: Materiały do wykładu i zadania laboratoryjne będzie można znaleźć na stronie: 2012lato/cpp/cpp.html Zakres materiału: programowanie obiektowe w C++; szablony w C++; biblioteka STL.
4 Organizacja zajęć LaboratoriumW semestrze będzie do zrealizowania około 12 prostych zadań. Za każde zaprogramowane zadanie będzie można dostać do 10 punktów. Aby zaliczyć kurs należy do końca semestru zgromadzić co najmniej 50% z możliwych do zdobycia punktów. Zadania należy oddawać w wyznaczonym terminie. Studenci powinni osobiście prezentować swoje programy w czasie trwania ćwiczeń laboratoryjnych.
5 Organizacja zajęć LiteraturaB.Stroustrup: Język C++. WNT, Warszawa 2000. N.M.Josuttis: C++. Biblioteka standardowa. Podręcznik programisty. Wydawnictwo Helion, Gliwice 2003. J.Grębosz: Symfonia C++ (tom 1, 2, 3). Oficyna Kallimach, Kraków 2002. J.Grębosz: Pasja C++ (tom 1, 2). Oficyna Kallimach, Kraków 2003. S.B.Lippman, J.Lajoie: Podstawy języka C++. WNT, Warszawa 2001. C.L.Tondo, B.P.Leung: Podstawy języka C++. Ćwiczenia i rozwiązania. WNT, Warszawa 2001.
6 Cechy języka C++ C++ jest rozszerzeniem ANSI C.C++ jest zorientowany na programowanie obiektowe. C++ to język ogólnego przeznaczenia. Wygenerowany przez kompilator C++ kod wynikowy jest bardzo efektywny. C++ i jego standardowe biblioteki zakładają przenośność.
7 Historia języka C++ Język C++ został wymyślony Bjarnea Stroustrupa.Pierwsza wersja języka, znana jako C z klasami, pojawiła się w roku 1979 (było to obiektowe rozszerzenie języka C). Nazwa języka C++ została zaproponowana przez Ricka Mascitti w 1983 roku. Pierwszy standard języka C++ powstał w 1998 roku (ISO/IEC 14882:1998 "Information Technology – Programming Languages – C++"). Aktualny standard języka C++ pochodzi z roku 2003 (jest to ISO/IEC 14882:2003).
8 Łagodne wprowadzenie do języka C++C++ wykład 1 ( ) Łagodne wprowadzenie do języka C++
9 Spis treści Pierwsze programy w C++ Struktura programu w C++ StałeZmienne ulotne Referencje Napisy Typ void Standardowe wejście i wyjście Klasy, obiekty, pola, metody
10 Pierwszy program Oto program powitalny w języku C++:# include
11 Drugi program Oto program, który zamieni milimetry na cale:# include
12 Struktura programu w C++Podział na pliki: nagłówkowe (rozszerzenie .h lub .hpp) z deklaracjami, źródłowe (rozszerzenie .cpp) z definicjami. W plikach nagłówkowych stosujemy włączanie warunkowe: # ifndef moje_h # define moje_h /* właściwa zawartość pliku moje_h */ # endif Aby otrzymać uruchamialny plik wynikowy w jednym z plików źródłowych musi się znaleźć definicja funkcji main().
13 Standardowe pliki nagłówkowePliki nagłówkowe odnoszące się do biblioteki standardowej nie mają żadnego rozszerzenia, na przykład: # include
14 Stałe, czyli zmienne ustaloneStałe są oznaczone deklaratorem const w deklaracji: const TYP zmienna = wyrażenie; Stałą należy zainicjalizować podczas deklaracji. Inicjalizacja stałego argumentu w funkcji następuje podczas wywołania funkcji. Do stałej nie wolno w programie nic przypisać – jej wartość określamy tylko podczas inicjalizacji.
15 Stałe w porównaniu z makrodefinicjamiDlaczego stałe są bezpieczniejsze od makrodefinicji? można określić zasięg nazwy stałej nazwa stałej jest znana kompilatorowi stała to komórka pamięci posiadająca swój adres łatwiejsza praca z debugerem
16 Zmienne ulotne Zmienne ulotne są oznaczone deklaratorem volatile w deklaracji: volatile TYP zmienna; Obiekt ulotny może się zmieniać w sposób wymykający się spod kontroli kompilatora (na przykład w obliczeniach współbieżnych). Kompilator nie optymalizuje kodu ze zmiennymi ulotnymi.
17 Referencje Operatory, które umożliwiają tworzenie typów złożonych:[] tablica * wskaźnik () funkcja & referencja Referencja odnosi się do istniejącego w pamięci obiektu. Referencję trzeba zainicjalizować. Referencja nie może zmienić obiektu, z którym została związana w czasie inicjalizacji.
18 Referencje Definicja referencji: typ &ref = obiekt;Przykład referencji: int x = 4; int &r = x; Referencje mają zastosowanie głównie jako argumenty funkcji i jako wartości zwracane przez funkcje. Przykład funkcji, która zamienia miejscami wartości zewnętrznych zmiennych: void zamiana (double &a, double &b) { double c = a; a = b; b = c; } Referencje implementuje się jako stały wskaźnik.
19 Napisy C-string to napis umieszczony w tablicy typu char[] zakończony znakiem o kodzie 0 '\0'. String to napis typu string przechowywany w obiekcie. Stringi są zadeklarowane w pliku nagłówkowym
20 Typ void Typ void informuje nas o braku typu.Typ void jest typem fundamentalnym, jednak nie wolno zadeklarować zmiennej typu void. Słowo void może wystąpić jako typ prosty w deklaracji typu złożonego: void *ptr; oznacza wskaźnik do pamięci na obiekt nieznanego typu; void fun (); oznacza, że funkcja nie będzie zwracała żadnego wyniku.
21 Stos i sterta Stos to pamięć zarządzana przez program.Zmienne lokalne tworzone w instrukcji blokowej są automatycznie usuwane przy wychodzeniu z bloku. Sterta to pamięć, którą zarządza programista. Programista przydziela obszar pamięci dla zmiennej operatorem new, ale musi pamiętać o zwolnieniu tej pamięci operatorem delete.
22 Standardowe wejście i wyjścieW bibliotece standardowej są zdefiniowane cztery obiekty związane ze standardowym wejściem i wyjściem: cin standardowe wejście, cout standardowe wyjście, clog standardowe wyjście dla błędów, cerr niebuforowane standardowe wyjście dla błędów. Do czytania ze strumienia wejściowego został zdefiniowany operator >>: cin >> zmienna; Do pisania do strumieni wyjściowych został zdefiniowany operator <<: cout << wyrażenie; clog << wyrażenie; cerr << wyrażenie; Operatory czytające >> ze strumienia i piszące << do strumienia można łączyć kaskadowo w dłuższe wyrażenia (wielokrotne czytanie albo pisanie).
23 Klasy Klasa to nowy typ danych (projekt).Obiekt to instancja klasy (realizacja projektu). Klasa posiada różne pola i metody: wartości pól w obiekcie określają stan obiektu, metody determinują funkcjonalność obiektu. Klasę definiuje się następująco: class klasa { // definicje pól // deklaracje metod };
24 Klasy Przykład klasy: class Punkt { public: double x, y; Punkt (double a, double b); void przesun_x (double dx); void przesun_y (double dy); double odleglosc (Punkt p); };
25 Klasy Metody w klasie tylko deklarujemy (jak funkcje w plikach nagłówkowych). Definicje metod umieszczamy poza klasą (definicje te są kwalifikowane nazwą kasy za pomocą operatora zakresu ::). Przykład definicji metody poza klasą: void Punkt::przesun_x (double dx) { x += dx; }
26 Konstruktor Konstruktor to specjalna metoda uruchamiana tylko podczas inicjalizacji obiektu. Konstruktor ma taką samą nazwę jak klasa. Konstruktor nie zwraca żadnego wyniku. Przykład konstruktora: Punkt::Punkt (double a, double b) { x = a, y = b; }
27 Obiekty Można utworzyć obiekt na stosie za pomocą zwykłej deklaracji połączonej z inicjalizacją. Przykład obiektu automatycznego: Punkt a = Punkt(4,6); Punkt b(5,7); Można też utworzyć obiekt na stercie za pomocą operatora new. Pamiętaj o usunięciu go operatorem delete, gdy będzie niepotrzebny. Przykład obiektu w pamięci wolnej: Punkt *p = new Punkt(-2,-3); // … delete p;
28 Składowe w obiekcie Do składowych w obiekcie odwołujemy się za pomocą operatora dostępu do składowych (kropka . dla obiektów i referencji albo strzałka -> dla wskaźników). Metoda jest wywoływana na rzecz konkretnego jednego obiektu. Przykłady odwołania do składowych w obiekcie: Punkt a(17,23), b(20,19), *p = &p; double d = a.odleglosc(b); b.przesun_y(8); p->przesun_x(6);