28
C++ Paweł Rzechonek Instytut Informatyki Uniwersytetu Wrocławskiego semestr letni 2011/2012

C++

  • Upload
    manjit

  • View
    35

  • Download
    0

Embed Size (px)

DESCRIPTION

C++. Paweł Rzechonek Instytut Informatyki Uniwersytetu Wrocławskiego semestr letni 2011/2012. Organizacja zajęć. Cel Nauka programowania obiektowego w języku C++. Umiejętność wykorzystania wybranych klas z biblioteki standardowej. Wymagania - PowerPoint PPT Presentation

Citation preview

Page 1: C++

C++

Paweł Rzechonek

Instytut InformatykiUniwersytetu Wrocławskiego

semestr letni 2011/2012

Page 2: C++

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).

Page 3: C++

Organizacja zajęć

Wykład Wykładowca:

Paweł Rzechonek Kontakt mailowy:

[email protected] Materiały do wykładu i zadania laboratoryjne będzie

można znaleźć na stronie:http://ww.ii.uni.wroc.pl/~prz/2012lato/cpp/cpp.html

Zakres materiału: programowanie obiektowe w C++; szablony w C++; biblioteka STL.

Page 4: C++

Organizacja zajęć

Laboratorium W 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.

Page 5: C++

Organizacja zajęć

Literatura B.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.

Page 6: C++

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ść.

Page 7: C++

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).

Page 8: C++

C++wykład 1 (8.02.2011)

Łagodne wprowadzenie do języka C++

Page 9: C++

Spis treści

Pierwsze programy w C++ Struktura programu w C++ Stałe Zmienne ulotne Referencje Napisy Typ void Standardowe wejście i wyjście Klasy, obiekty, pola, metody

Page 10: C++

Pierwszy program

Oto program powitalny w języku C++:

# include <iostream>

using namespace std;

int main (int argc, char *argv[])

{

cout<<”witaj na kursie C++”<<endl;

return 0;

}

Page 11: C++

Drugi program

Oto program, który zamieni milimetry na cale:

# include <iostream>using namespace std;int main (){ cerr << "podaj długość w [mm]: "; int mm; cin >> mm; double inch = mm*25.3995; cerr << "ta sama długość w [in]: "; cout << mm << "[mm] = " << inch << "[in]"<< endl; return 0;}

Page 12: C++

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().

Page 13: C++

Standardowe pliki nagłówkowe Pliki nagłówkowe odnoszące się do biblioteki

standardowej nie mają żadnego rozszerzenia, na przykład:# include <iostream># include <iomanip># include <string>

Nazwy odnoszące się do starych plików nagłówkowych z języka C są poprzedzone literą ”c”, na przykład:# include <cmath>

Wszystkie definicje z biblioteki standardowej są umieszczone w przestrzeni nazw std, dlatego wygodnie jest na początku (małego) programu włączyć tą przestrzeń poleceniem:using namespace std;

Page 14: C++

Stałe, czyli zmienne ustalone

Stał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.

Page 15: C++

Stałe w porównaniu z makrodefinicjami

Dlaczego 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

Page 16: C++

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.

Page 17: C++

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.

Page 18: C++

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.

Page 19: C++

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 <string>.

Stringi można ze sobą konkatenować za pomocą operatorów + i +=.

W przypadku stringów nie trzeba się martwić o miejsce na napis – zostanie ono automatycznie zaalokowane.

Page 20: C++

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.

Page 21: C++

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.

Page 22: C++

Standardowe wejście i wyjście W 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).

Page 23: C++

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};

Page 24: C++

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);};

Page 25: C++

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;}

Page 26: C++

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;}

Page 27: C++

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;

Page 28: C++

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);