1 / 28

C++

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

manjit
Download Presentation

C++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C++ Paweł Rzechonek Instytut Informatyki Uniwersytetu Wrocławskiego semestr 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ł Rzechonek • Kontakt mailowy:prz@ii.uni.wroc.pl • 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.

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

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

  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. C++wykład 1 (8.02.2011) Łagodne wprowadzenie do języka C++

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

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

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

  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łó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;

  14. Stałe, czyli zmienne ustalone • Stałe są oznaczone deklaratorem const w deklaracji:constTYP 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 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

  16. Zmienne ulotne • Zmienne ulotne są oznaczone deklaratorem volatile w deklaracji:volatileTYP 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 <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.

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

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

More Related