Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Podobne dokumenty
Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 24

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 20 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Pliki wykład 2. Dorota Pylak

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

Operacje wejścia/wyjścia (odsłona druga) - pliki

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Program dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku.

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 25 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 38

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Projektowanie klas c.d. Projektowanie klas przykład

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Język C++ wykład VIII

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Wykład :37 PP2_W9

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

Język C++ Różnice między C a C++

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

Pliki wykład 2. Dorota Pylak

Programowanie w C++ Wykład 10. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 10) Programowanie w C++ 1 / 21

Operacje wejścia/wyjścia odsłona pierwsza

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

PARADYGMATY PROGRAMOWANIA Wykład 2

Podstawy programowania skrót z wykładów:

Wstęp do programowania. Dariusz Wardecki, wyk. X

Wstęp do Programowania 2

Pliki wykład. Dorota Pylak

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

PARADYGMATY PROGRAMOWANIA Wykład 3

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

Operatory na rzecz typu TString

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Podstawy Programowania

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

dr inż. Jarosław Forenc

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

Zofia Kruczkiewicz, ETE8305_2 1

Programowanie obiektowe w C++ Wykład 12

Wstęp do Programowania 2

Programowanie komputerowe. Zajęcia 7

Pliki wykład 2 -przekazywanie strumieni do funkcji -funkcje get(char &) i getline(string)

PROE wykład 4 pozostałe operatory, forward declaration, dziedziczenie. dr inż. Jacek Naruniec

Programowanie - wykład 4

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Dziedziczenie & W slajdach są materiały zapożyczone z

Programowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

Zajęcia nr 4 Programowanie obiektowe konstruktory. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Programowanie obiektowe

Pliki wykład. Dorota Pylak

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe

Co nie powinno być umieszczane w plikach nagłówkowych:

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Programowanie 2. Język C++. Wykład 3.

Część 4 życie programu

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

class Student Deklaracja klasy Osoba: Deklaracja klasy Student:

Podstawy programowania w C++

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

STL: Lekcja 1&2. Filozofia STL

Wstęp do informatyki- wykład 11 Funkcje

1 Pierwsze kroki w C++ cz.3 2 Obsługa plików

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Konstruktor kopiujacy

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Programowanie Obiektowe i C++

Wstęp do informatyki- wykład 9 Funkcje

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python.

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

I - Microsoft Visual Studio C++

Przekazywanie argumentów wskaźniki

KLASY cz4. Dorota Pylak. destruktory składowe statyczne przeciążanie operatorów. wskaźniki

4. Wyrzuć wyjątek jeśli zmienna ist nie istnieje bloki: try, catch i wyrzucanie wyjątku

Transkrypt:

Programowanie w C++ Wykład 8 Katarzyna Grzelak 15 kwietnia 2019 K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe plus funkcje składowe (metody) K.Grzelak (Wykład 8) Programowanie w C++ 2 / 33

Podział na pliki.h i.cc Każda klasa w osobnym pliku (na ogół) W pliku nagłówkowym (rozszerzenie.h) definicja klasy W pliku.cc (lub.cpp,.cxx... ) definicje funkcji składowych K.Grzelak (Wykład 8) Programowanie w C++ 3 / 33

Plik nagłówkowy z definicja klasy Średnik na końcu! Przykład: Wektor2D.h #ifndef WEKTOR2D_H #define WEKTOR2D_H class Wektor2D { public: void ustaw(double a1, double b1, double a2, double b2); double dlugosc(); private: double x1,y1,x2,y2; }; #endif K.Grzelak (Wykład 8) Programowanie w C++ 4 / 33

Plik z definicjami funkcji składowych Przykład: Wektor2D.cc #include<cmath> #include "Wektor2D.h" void Wektor2D::ustaw(double a1, double b1, double a2, double b2){ x1=a1; y1=b1; x2=a2; y2=b2; } double Wektor2D::dlugosc(){ double d=sqrt((x2-x1)*(x2-x1) +(y2-y1)*(y2-y1)); return d; } K.Grzelak (Wykład 8) Programowanie w C++ 5 / 33

Enkapsulacja Enkapsulacja - ukrycie wewnętrznej struktury Dane składowe zwykle deklarowane jako prywatne; dostęp do nich tylko za pomoca funkcji składowych. Konsekwencje enkapsulacji Program używajacy danej klasy nie musi znać jej struktury danych Można przebudować klasę, a użycie będzie niezmienione (jeśli prototypy funkcji składowych będa niezmienione) K.Grzelak (Wykład 8) Programowanie w C++ 6 / 33

Główny program, użycie nowego typu zmiennej Przykład: prog.cc #include<iostream> #include "Wektor2D.h" using namespace std; int main(){ Wektor2D v1; v1.ustaw(0.5,0.2,1.5,0.8); cout «v1.dlugosc() «endl; return 0; } K.Grzelak (Wykład 8) Programowanie w C++ 7 / 33

Podział na pliki.h i.cc Dlaczego klasy zapisuje się w oddzielnych plikach? Tej samej klasy można łatwo używać w wielu miejscach Każda klasę kompiluje się tylko raz (szczególnie ważne w dużych projektach) K.Grzelak (Wykład 8) Programowanie w C++ 8 / 33

Kompilacja programu zapisanego w kilku plikach Gdy program złożony z niewielkiej liczby plików: g++ -o prog prog.cc Wektor2D.cc Pliki nagłówkowe właczane automatycznie przez preprocesor (polecenie #include wewnatrz plików.cc) Większe projekty proces kompilacji zapisany w pliku Makefile (więcej na jednym z następnych wykładów); środowiska do kompilacji K.Grzelak (Wykład 8) Programowanie w C++ 9 / 33

Użycie nowego typu Deklaracja zmiennej typu Wektor2D: Wektor2D v1; Przekazywanie obiektu typu Wektor2D do funkcji jak w przypadku zwykłych typów i vector a STL przez wartość (niedobre rozwiazanie gdy duży obiekt): void (Wektor2D v1); przez referencję (jeśli funkcja ma zmieniać obiekt): void (Wektor2D &v1); przez referencję (jeśli funkcja ma nie zmieniać obiektu): void (const Wektor2D &v1); K.Grzelak (Wykład 8) Programowanie w C++ 10 / 33

Konstruktor, czyli rozbudowujemy klasę Konstruktor czyli powołanie do życia obiektu i nadanie wartości danym składowym w jednej linijce Tak można zrobić przy użyciu funkcji składowej... Wektor2D v1; v1.ustaw(0.5,0.2,1.5,0.8);... ale tak byłoby prościej: Wektor2D v1(0.5,0.2,1.5,0.8); K.Grzelak (Wykład 8) Programowanie w C++ 11 / 33

Konstruktor Konstruktor to specjalna funkcja składowa wywoływana automatycznie przy tworzeniu obiektu. Konstruktor nazywa się tak samo jak klasa Przed nazwa nie ma żadnego typu wartości zwracanej; nie ma return Konstruktorów może być kilka (z różnymi argumentami) K.Grzelak (Wykład 8) Programowanie w C++ 12 / 33

Konstruktor Przykłady konstruktorów klasy Wektor2D // Konstruktor standardowy Wektor2D(){} // Drugi konstruktor Wektor2D(double a1, double b1, double a2, double b2){ x1=a1; y1=b1; x2=a2; y2=b2; } K.Grzelak (Wykład 8) Programowanie w C++ 13 / 33

Konstruktor Przykłady konstruktorów klasy Wektor2D // Konstruktor standardowy Wektor2D(){} // Inny zapis konstruktora // z poprzedniej klasy // (prawie równoważny) Wektor2D(double a1,double b1,double a2,double b2): x1(a1),y1(b1),x2(a2),y2(b2) { } W definicji klasy może nie być konstruktora konstruktor standardowy zostanie stworzony automatycznie. K.Grzelak (Wykład 8) Programowanie w C++ 14 / 33

Cały plik nagłówkowy z konstruktorami #ifndef WEKTOR2D_H #define WEKTOR2D_H class Wektor2D { public: Wektor2D(){} // konstruktor standardowy Wektor2D(double a1,double b1,double a2,double b2): x1(a1),y1(b1),x2(a2),y2(b2) { } // drugi // konstruktor void ustaw(double a1, double b1, double a2, double b2); double dlugosc(); private: double x1,y1,x2,y2; }; #endif K.Grzelak (Wykład 8) Programowanie w C++ 15 / 33

Konstruktor - użycie // Tutaj zostanie uruchomiony // standardowy konstruktor Wektor2D v1; v1.ustaw(0.5,0.2,1.5,0.8); // Tutaj zostanie uruchomiony drugi // konstruktor Wektor2D v1(0.5,0.2,1.5,0.8); K.Grzelak (Wykład 8) Programowanie w C++ 16 / 33

Konstruktor standardowy (domyślny) - default constructor Standardowy konstruktor, to taki który nie ma żadnych argumentów (albo wszystkie argumenty maja domyślne wartości) Jeśli nie stworzymy żadnego konstruktora, to konstruktor standardowy zostanie stworzony automatycznie K.Grzelak (Wykład 8) Programowanie w C++ 17 / 33

Konstruktor standardowy (domyślny) - default constructor Konstruktor standardowy Trzy możliwości: nie tworzymy żadnego konstruktora konstruktor standardowy zostanie stworzony automatycznie tworzymy własny konstruktor standardowy i ten jest używany tworzymy własne konstruktory (z różnymi argumentami), ale między nimi nie ma tego standardowego (bez żadnych argumentów) klasa nie ma konstruktora standardowego i nie można stworzyć obiektu bez podawania żadnego argumentu (np. NazwaKlasy kl;) K.Grzelak (Wykład 8) Programowanie w C++ 18 / 33

Konstruktor domyślny w standardzie C++11 Konstruktor standardowy Tak można zrobić zawsze: NazwaKlasy(); A dodatkowo tak w standardzie C++11: NazwaKlasy()=default; Standardowy konstruktor zostanie stworzony, nawet jeśli sa inne konstruktory. NazwaKlasy()=delete; Nie można stworzyć obiektu bez podawania żadnego argumentu ( np: NazwaKlasy kl;) Program się nie skompiluje. K.Grzelak (Wykład 8) Programowanie w C++ 19 / 33

Destruktor Destruktor to specjalna funkcja składowa wywoływana automatycznie przed likwidacja obiektu. Destruktor nazywa się tak samo jak klasa + falka przed nazwa. Przed nazwa nie ma żadnego typu wartości zwracanej; nie ma return W definicji klasy może nie być destruktora. K.Grzelak (Wykład 8) Programowanie w C++ 20 / 33

Cały plik nagłówkowy z konstruktorami i destruktorem #ifndef WEKTOR2D_H #define WEKTOR2D_H class Wektor2D { public: Wektor2D(){} // konstruktor standardowy // drugi konstruktor Wektor2D(double a1,double b1,double a2,double b2): x1(a1),y1(b1),x2(a2),y2(b2) { } Wektor2D() { } // destruktor void ustaw(double a1, double b1, double a2, double b2); double dlugosc(); private: double x1,y1,x2,y2; }; #endif K.Grzelak (Wykład 8) Programowanie w C++ 21 / 33

Wybrane klasy z biblioteki standardowej klasa string K.Grzelak (Wykład 8) Programowanie w C++ 22 / 33

Klasa string - konstruktory #include<string> Pusty string, użyty standardowy konstruktor: string wyraz; string = Ala ma kota ; Inicjalizacja stringu (konstruktor niestandardowy): string napis1( Ala ma kota ); char tab[20]={ Ala ma psa }; string napis2(tab); K.Grzelak (Wykład 8) Programowanie w C++ 23 / 33

Klasa string - funkcje składowe size() z ilu znaków składa się string empty() zwraca true, jeśli string jest pusty clear() - kasuje zawartosc obiektu at(pozycja), [pozycja] odniesienie do znaku znajdujacego się na pozycji pozycja c_str() zamiana obiektu z klasy string na c-string... K.Grzelak (Wykład 8) Programowanie w C++ 24 / 33

Wybrane klasy z biblioteki standardowej o strumieniach Wprowadzanie i wyprowadzanie informacji strumień bajtów płynacy od źródła do ujścia. K.Grzelak (Wykład 8) Programowanie w C++ 25 / 33

Strumienie 1 Standardowe strumienie wejściowe i wyjściowe (klawiatura, ekran) 2 Strumienie zwiazane z plikami 3 Strumienie zapisujace do/czytajace z obiektu string K.Grzelak (Wykład 8) Programowanie w C++ 26 / 33

Pliki Pamiec glowna Pamiec zewnetrzna File buffer Write Read File K.Grzelak (Wykład 8) Programowanie w C++ 27 / 33

Pliki Plik nagłówkowy #include<fstream> ifstream - klasa do czytania z pliku ofstream - klasa do pisania do pliku K.Grzelak (Wykład 8) Programowanie w C++ 28 / 33

Klasa ofstream - do pisania do plików #include<fstream> Otwieranie pliku do pisania (jeśli istniał, zostanie skasowany): ofstream fileout; fileout.open( out.txt ); lub ofstream fileout( out.txt ); Dopisywanie do końca pliku: ofstream fileout( out.txt,ios::app); K.Grzelak (Wykład 8) Programowanie w C++ 29 / 33

Klasa ofstream - do pisania do plików Analogicznie do cout: ofstream fileout( out.txt ); fileout «Tekst «endl; fileout «M_PI ««M_PI*M_PI «endl; fileout.close(); K.Grzelak (Wykład 8) Programowanie w C++ 30 / 33

Klasa ifstream - do czytania z plików #include<fstream> Otwieranie pliku do czytania: ifstream fileinp; fileinp.open( data.txt ); lub ifstream fileinp( data.txt ); Zaraz za otwarciem sprawdzanie czy plik nie istnieje: if(fileinp.fail()){ cout «Plik nie istnieje «endl; } lub if(!fileinp) { cout «Plik nie istnieje «endl; } K.Grzelak (Wykład 8) Programowanie w C++ 31 / 33

Klasa ifstream - do czytania z plików Nazwa pliku wczytywana z klawiatury: cout «Podaj nazwe pliku «endl; string nazwa; cin» nazwa; ifstream fileinp(nazwa.c_str()); K.Grzelak (Wykład 8) Programowanie w C++ 32 / 33

Klasa ifstream - do czytania z plików Analogicznie do cin: int liczba; while(true){ fileinp» liczba; if(!fileinp){ break; } cout «Wczytana liczba = «liczba «endl; } lub while(fileinp» liczba){ cout «Wczytana liczba = «liczba «endl; } K.Grzelak (Wykład 8) Programowanie w C++ 33 / 33