K URS JĘZYKA C++ – WYKŁAD 1 (3.03.2014) Łagodne wprowadzenie do języka C++

Slides:



Advertisements
Podobne prezentacje
Wstęp do programowania
Advertisements

C++ Paweł Rzechonek Instytut Informatyki Uniwersytetu Wrocławskiego
Klasa listy jednokierunkowej Przekazywanie parametrów do funkcji
Standardowa biblioteka języka C++
Programowanie obiektowe
1 Dzisiejszy wykład Klasa string wersja prosta wersja ze zliczaniem odwołań Wyjątki Specyfikator volatile.
Prowadzący: mgr inż. Elżbieta Majka
Wprowadzenie.
Static, const, volatile.
Filip Andrzejewski Remigiusz Chiluta
argumenty wiersza poleceń: getopt
Sprawdzian Zadanie 1: Napisz program obliczający pole i obwód prostokąta. Wymiary pobierz z klawiatury od użytkownika. Zadanie 2: Napisz program sprawdzający,
Podstawy informatyki Wirtotechnologia Grupa: 1A
Wykład 1: Wskaźniki Podstawy programowania Programowanie w C
Podstawy programowania PP – WYK2 Wojciech Pieprzyca.
Zachodniopomorskie Centrum Edukacyjne Zadanie domowe.
#include #include main () { cout
Programowanie obiektowe W2
Klasy w C++. Deklaracja klasy class NazwaTwojejKlasy { //w tym miejscu piszemy definicje typów, //zmienne i funkcje jakie mają należeć do klasy. }; //tutaj.
Programowanie obiektowe III rok EiT
Podstawy informatyki (4)
Podstawy informatyki 2013/2014
Podstawy informatyki 2013/2014
Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Procedury i funkcje.
Podstawy Programowania
Zadanie Dev C++.
Przekazywanie argumentów
Programowanie strukturalne i obiektowe
Programowanie strukturalne i obiektowe
Instrukcja for. Instrukcja warunkowa mgr inż. Agata Pacek.
jeszcze dygresja o macierzach...
Składnia pętli do … while do instrukcja while (wyrażenie); gdzie: instrukcja – instrukcja pojedyncza lub blok instrukcji wyrażenie – wyrażenie przyjmujące.
Kurs języka C++ – wykład 13 ( )
Kurs języka C++ – wykład 3 ( )
Kurs języka C++ – wykład 8 ( )
Programowanie w języku C++
Kurs języka C++ – wykład 5 ( )
Programowanie strukturalne i obiektowe C++
Programowanie strukturalne i obiektowe C++
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie strukturalne i obiektowe C++
K URS JĘZYKA C++ – WYKŁAD 10 ( ) Szablony.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
Programowanie strukturalne i obiektowe C++
Programowanie strukturalne i obiektowe C++ Przeładowanie operatorów Robert Nowak.
Kurs języka C++ – wykład 4 ( )
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
K URS JĘZYKA C++ – WYKŁAD 6 ( ) Polimorfizm.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie strukturalne i obiektowe C++ Powtórzenie wiadomości z C++ Robert Nowak.
1 dynamiczny przydział pamięci malloc() free() realloc() calloc() memset() memcpy( ) mempcpy( ) memmove() (wskaźniki!! )
Pliki tekstowe – odczyt i zapis Zajęcia 11. Zapis do pliku tekstowego Prosty program pokazujący sposób zapisu do pliku tekstowego: // writing on a text.
PO13-1 / 19 Wykład 13 Wyjątki i ich zgłaszanie Wyłapywanie wyjątków Obsługa wyjątków Wykorzystanie polimorfizmu Filtrowanie wyjątków Błędy w konstruktorach.
Podstawy informatyki Tablice Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka Podstawy.
Podstawy informatyki Struktury Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Programowanie I Rekurencja.
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
K URS JĘZYKA C++ – WYKŁAD 1 ( ) Łagodne wprowadzenie do języka C++
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
Kurs języka C++ – wykład 3 ( )
Wstęp do programowania
Język C++ Typy Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego.
Język C++ Tablice Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego.
Zapis prezentacji:

K URS JĘZYKA C++ – WYKŁAD 1 ( ) Łagodne wprowadzenie do języka C++

S PIS TREŚCI Pierwsze programy w C++ Struktura programu w C++ Zmienne ustalone const i ulotne volatile Referencje Pętla for dla przeglądania tablic Napisy typu string Typ void Wskaźnik pusty nullptr Standardowe wejście i wyjście Klasy, obiekty, pola, metody

P IERWSZY PROGRAM Oto program powitalny w języku C++: #include using namespace std; int main (int argc, char *argv[]) { cout << "witaj na kursie C++" << endl; return 0; }

D RUGI PROGRAM Oto program, który zamieni milimetry na cale: #include using namespace std; int main () { cerr << "[mm]: "; double mm; cin >> mm; double inch = mm/ ; cout << inch << endl; cerr << mm << "[mm] = " << inch << "[in]" << endl; return 0; }

S TRUKTURA PROGRAMU W C++ Podział na pliki: nagłówkowe (rozszerzenie.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().

S TANDARDOWE PLIKI NAGŁÓWKOWE Pliki nagłówkowe odnoszące się do biblioteki standardowej nie mają żadnego rozszerzenia, na przykład: #include #include #include Nazwy odnoszące się do starych plików nagłówkowych z języka C są poprzedzone literą ”c”, na przykład: #include #include 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;

S TAŁ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. Przykład: const double phi = ;

S TAŁE W PORÓWNANIU Z MAKRODEFINICJAMI Dlaczego stałe są bezpieczniejsze od makrodefinicji? znany jest typ stałej 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

Z MIENNE 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. Przykład: volatile int counter;

R EFERENCJE 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. Referencję implementuje się jako stały wskaźnik.

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

P ĘTLA FOR OPARTA NA ZAKRESIE Zakresy reprezentują kontrolowaną listę pomiędzy dwoma jej punktami. Kontenery uporządkowane są nad zbiorem koncepcji zakresu i dwa iteratory w kontenerze uporządkowanym także definiują zakres. Nowa pętla for została stworzona do łatwej iteracji po zakresie; jej ogólna postać jest następująca: for (TYP &x: kolekcja ) instrukcja; Przykład: int moja_tablica[5] = {1, 2, 3, 4, 5}; for(int &x: moja_tablica) { x *= 2; } Pierwsza sekcja nowego for (przed dwukropkiem) definiuje zmienną, która będzie użyta do iterowania po zakresie. Zmienna ta, tak jak zmienne w zwykłej pętli for, ma zasięg ograniczony do zasięgu pętli. Druga sekcja (po dwukropku), reprezentuje iterowany zakres. W tym przypadku, zwykła tablica jest konwertowana do zakresu. Mógłby to być na przykład std::vector albo inny obiekt spełniający koncepcję zakresu.

N APISY 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. 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.

T YP 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.

W SKAŹNIK PUSTY NULLPTR W starszym C++, stała 0 spełnia dwie funkcje: stałej całkowitej i pustego wskaźnika; programiści obchodzili tę niejednoznaczność za pomocą identyfikatora NULL zamiast 0. W języku C identyfikator NULL jest makrem preprocesora zdefiniowanym jako ((void*)0) ; w starym C++ niejawna konwersja z void* do wskaźnika innego typu jest niedozwolona, więc nawet takie proste przypisanie jak char* c = NULL mogłoby być w tym przypadku błędem kompilacji. Sytuacja komplikuje się w przypadku przeciążania: void foo(char*); void foo(int); Gdy programista wywoła foo(NULL), to wywoła wersję foo(int), która prawie na pewno nie była przez niego zamierzona.

W SKAŹNIK PUSTY NULLPTR Wskaźnik pusty, który nie pokazuje na żaden obiekt w pamięci zapisujemy jako nullptr – zastępuje makro NULL albo 0 (jest to adres o wartości 0 – adres pierwszej komórki w pamięci operacyjnej). Wskaźnik nullptr nie może być przypisany do typów całkowitych, ani porównywany z nimi. Wskaźnik nullptr może być porównywany z dowolnymi typami wskaźnikowymi.

S TOS 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.

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

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

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

K LASY 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; } Zmienne globalne czy funkcje globalne kwalifikujemy operatorem zakresu globalnego: ::zmienna; ::f();

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

O BIEKTY 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;

S KŁ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 funkcji składowych w obiekcie: Punkt a(17,23), b(20,19), *p = &a; double d = a.odleglosc(b); b.przesun_y(8); p->przesun_x(6);