3-4. 5-7. 8-10. 11-12 15-18. 19-22



Podobne dokumenty
Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

Wartości domyślne, szablony funkcji i klas

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

Projektowanie i programowanie obiektowe (materiały do wykładu cz. VI)

Kompozycja i dziedziczenie klas

Programowanie obiektowe w C++ Wykład 11

PROGRAMOWANIE OBIEKTOWE W C++ - cz 1. Definicja klasy, składniki klasy, prawa dost pu, definiowanie funkcji składowych, konstruktory i destruktory.

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

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

Ćwiczenia IV - Kontenery (pojemniki)

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Zaawansowane programowanie w języku C++ Programowanie obiektowe

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

Funkcje składowe (metody)

Algorytmy i Struktury Danych.

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów.

Plik klasy. h deklaracje klas

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

PARADYGMATY PROGRAMOWANIA Wykład 4

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

Praca na wielu bazach danych część 2. (Wersja 8.1)

PERSON Kraków

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

Do czego służą klasy?

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

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Wskaznik. Przekazywanie wyniku funkcji przez return. Typy i zmienne wskaznikowe. Zmienna wskazywana. typ * nazwa_wkaznika

Spis treści. Rozdział 1 ewyniki. mmedica - INSTR UKC JA UŻYTKO W NIKA

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

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

class A { public: A(): i(5), s("abc") { } int i; string s; };

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

Podstawy Programowania Obiektowego

1. PODMIOTEM ŚWIADCZĄCYM USŁUGI DROGĄ ELEKTRONICZNĄ JEST 1) SALESBEE TECHNOLOGIES SP. Z O.O. Z SIEDZIBĄ W KRAKOWIE, UL.

Informatyka, I stopień. Programowanie (PRO300.1)

Wstęp do Programowania 2

Bazy danych. Andrzej Łachwa, UJ, /15

API transakcyjne BitMarket.pl

Pracownia internetowa w każdej szkole. Opiekun pracowni internetowej SBS 2003 PING

1 Klasy. 1.1 Denicja klasy. 1.2 Skªadniki klasy.

WYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Projektowanie systemów informacyjnych: język UML

Aplikacje internetowe i rozproszone - laboratorium

Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

TEMAT : KLASY POLIMORFIZM

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

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

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.

Tomasz Greszata - Koszalin

InsERT GT Własne COM 1.0

Wykład 4 Wybrane zagadnienia programowania w C++

class Samochod { void Ruch(); }; class Amfibia : public Samochod { void Ruch(); // amfibie pływają };

Programowanie obiektowe w C++ Wykład 12

Chmura obliczeniowa. do przechowywania plików online. Anna Walkowiak CEN Koszalin

Wstęp do programowania obiektowego, wykład 7

Przedmiot: Projektowanie dokumentów WWW. Laboratorium 3: Strona domowa cz. III Formularze. Opracował: Maciej Chyliński

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Paradygmaty programowania

Szablony funkcji i szablony klas

Materiały do zajęć VII

Strategia rozwoju kariery zawodowej - Twój scenariusz (program nagrania).

INSTRUKCJA WebPTB 1.0

Identyfikacje typu na etapie. wykonania (RTTI)

Oprogramowanie klawiatury matrycowej i alfanumerycznego wyświetlacza LCD

Warunki Oferty PrOmOcyjnej usługi z ulgą

Abstrakcyjny typ danych

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

PL/SQL. Zaawansowane tematy PL/SQL

Opis obsługi systemu Ognivo2 w aplikacji Komornik SQL-VAT

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

WYKŁAD 8. Postacie obrazów na różnych etapach procesu przetwarzania

Utrzymanie aplikacji biznesowych SI PSZ

REGULAMIN PRZEPROWADZANIA OCEN OKRESOWYCH PRACOWNIKÓW NIEBĘDĄCYCH NAUCZYCIELAMI AKADEMICKIMI SZKOŁY GŁÓWNEJ HANDLOWEJ W WARSZAWIE

Wdrożenie modułu płatności eservice dla systemu Virtuemart 2.0.x

string Rodzaj[4]= {"TV ", "wieza ", "DVD ", "kino "}; string Producent[4]={"Phillips", "Sony ", "Sanyo ", "Samsung "};

INSTRUKCJA DO PROGRAMU LICZARKA 2000 v 2.56

Założenia prognostyczne Wieloletniej Prognozy Finansowej

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

Regulamin serwisu internetowego ramowka.fm

Technologie obiektowe

SKRÓCONA INSTRUKCJA OBSŁUGI ELEKTRONICZNEGO BIURA OBSŁUGI UCZESTNIKA BADANIA BIEGŁOŚCI

elektroniczna Platforma Usług Administracji Publicznej

System zarządzania bazą danych (SZBD) Proces przechodzenia od świata rzeczywistego do jego informacyjnej reprezentacji w komputerze nazywać będziemy

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

Kancelaris - Zmiany w wersji 2.50

Owad():waga(1),jadowitosc(false) {cout<<"konstruktor domyslny owada\n";}

Tekst ozdobny i akapitowy

Pierwsze kroki. Krok 1. Uzupełnienie danych własnej firmy

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Skrócony podręcznik obsługi dla programu Wizualna poczta głosowa w wersji 8.5 lub nowszej

PRZEMYSŁOWY ODTWARZACZ PLIKÓW MP3 i WAV

Programowanie Komputerów

emszmal 3: Automatyczne księgowanie przelewów w sklepie internetowym Magento (plugin dostępny w wersji ecommerce)

Transkrypt:

1. 2. 3-4. 5-7. 8-10. 11-12 13-14. 15-18. 19-22 23-28. 29-30. Programowanie strukturalne i obiektowe Typ wyliczeniowy, lista wyliczeniowa. Rzutowanie w C++. Wskaźniki i referencje. Działania na wskaźnikach. Wskaźniki typu const. Tablice wskaźników. Tworzenie elementów na stercie i zwalnianie pamięci. Funkcje i operatory. Wywołanie funkcji. Modyfikator const. Przekazywanie argumentów (wartość, wskaźnik, referencja) i zwracane wartości. Przeciążanie funkcji i operatorów. Szablony funkcji. Makro. Argumenty funkcji main(). Funkcje inline. Klasa, struktura, unia. Obiekty. Składowe i funkcje składowe klasy. Struktura programu przy stosowaniu programowania obiektowego. Dostęp do składowych i funkcji klasy. Umiejscowienie funkcji składowych klasy. Składowe statyczne klasy i ich definicja. Tworzenie obiektów klasy. Konstruktor. Umiejscowienie konstruktora. Użycie wielu konstruktorów. Likwidacja obiektu klasy. Umiejscowienie destruktora. Tablice obiektów. Klasy zagnieżdżone Wskaźniki do obiektów klasy. Tworzenie i likwidacja. obiektów klasy przy użyciu wskaźników. Dostęp do składowych i funkcji składowych klasy za pomocą wskaźników. Wskaźnik this. Działania na obiektach. Przeciążanie funkcji i operatorów. Rzutowanie. Dziedziczenie. Typy dziedziczenia i dostęp do składowych i funkcji klasy. Konstruktory i destruktory. Dostęp do składowych i funkcji składowych klasy bazowej i pochodnej. Przesłanianie i ukrywanie metod klasy bazowej. Rzutowanie. Dziedziczenie wielokrotne. Konstruktory i destruktory przy dziedziczeniu wielokrotnym. Eliminacja niejednoznaczności. Dziedziczenie ze wspólnej klasy bazowej. Funkcje wirtualne i klasy abstrakcyjne. Rzutowanie. STL Zaliczenie 1

Poniższy kod: struct Struct {int val;}; int main() {Struct.val = 5; return 0;} a) przypisze zmiennej val wartość 5 b) nie zostanie wykonany - w strukturze Struct nie ma konstruktora c) nie zostanie wykonany - dostęp do zmiennej val jest private d) nie zostanie wykonany - nie został stworzony obiekt struktury Struct Efektem poniższego programu: class Ptak{public: virtual void Glos() const=0;}; class Wrona: public Ptak {public:void Glos() const{cout<<"kra"<<endl;}}; int main() {Ptak ptak; Wrona wrona; wrona.glos(); return 0;} będzie: a) Kra b) Błąd polegający na braku konstruktora klasy Ptak c) błąd polegający na próbie stworzenia obiektu klasy abstrakcyjnej d) Błąd polegający na braku konstruktora klasy Wrona 2

Poniższy kod: class Class {int val;}; int main() {class Class; Class.val = 5; return 0;} a) przypisze zmiennej val wartość 5 b) nie zostanie wykonany - dostęp do zmiennej val jest private c) nie zostanie wykonany - nie został stworzony obiekt klasy Class d) nie zostanie wykonany - w klasie Class nie ma konstruktora Definicja funkcji składowej Function poza ciałem klasy Class musi mieć postać a) typ_zwracany Class.Function(){} b) typ_zwracany Class::Function(){} c) typ_zwracany Class::Function(){} const d) Funkcji składowej nie wolno definiować poza ciałem klasy 3

Programowanie strukturalne Program jest zestawem zadań do wykonania Jest rozumiany jako seria procedur, działających na danych Procedura (funkcja, metoda) ciąg następujących po sobie instrukcji Zadania skomplikowane są dzielone na prostsze, aż do momentu, kiedy wszystkie są zrozumiałe 4

Cechy charakterystyczne : 1. Dane są odseparowane od procedur i nie ma możliwości ich połączenia 2. Programista musi pamiętać, która funkcja wywołuje inne funkcje i które dane są zmieniane 3. Powtarzanie fragmentów kodu 4. Koncentruje się na czynnościach 5. Problemy z połączeniem zmiennych różnych typów 6. Problemy z modyfikacjami kodu i rozbudową programu 5

Przykład: Obliczenie średniego wynagrodzenia pracownika 1. Policzenie liczby pracowników 2. Obliczenie zarobków poszczególnych osób (odczytanie danych każdego pracownika <otwarcie pliku danych, odszukanie właściwych danych, odczyt danych>, dodanie jego pensji do sumy, przejście do kolejnej osoby) 3. Zsumowanie wszystkich pensji 4. Podzielenie sumy przez liczbę pracowników 6

Programowanie zorientowane obiektowo 1. Jego zadaniem jest modelowanie obiektów (rzecz lub koncepcja), a nie danych 2. Określenie właściwości obiektu (atrybut, funkcja) 3. Zdefiniowanie czynności wykonywanych przez obiekt 4. Określenie związków między obiektami 7

Cechy programowania zorientowanego obiektowo 1. Funkcjonalność - program musi być zawsze zorientowany na klienta. 2. Elastyczność programista musi przewidywać zmieniające się warunki eksploatacji oprogramowania i wymagania klienta 3. Wzorce projektowe wielokrotne wykorzystanie tego samego kodu 4. Hermetyzacja używana w celu oddzielenia fragmentów kodu, które ulegają zmianom od tych, które pozostają takie same 8

Podstawy programowania zorientowanego obiektowo Hermetyzacja (ukrywanie danych) wszystkie właściwości obiektu są zgrupowane w jego wnętrzu obiekt jest traktowany jak czarna skrzynka. Oddziela dane od aplikacji. C++ obsługuje hermetyzację poprzez możliwość tworzenia typów danych zdefiniowanych przez użytkownika KLASY. Użytkownicy dobrze zdefiniowanej klasy nie mają wpływu na jej wewnętrzne działanie potrafią tylko z niej korzystać. 9

Podstawy programowania zorientowanego obiektowo Dziedziczenie (w celu ponownego wykorzystania) C++ umożliwia deklarowanie nowych typów stanowiących rozszerzenie typów już zadeklarowanych. Polimorfizm różne obiekty wykonują podobne czynności W C++ polimorfizm klas i polimorfizm obiektów 10

Klasa - grupa zmiennych, często różnych typów wraz z zestawem funkcji (czynności) odnoszących się do nich. Obiekt - indywidualny element klasy UML Unified Modelling Language Nazwa klasy Samochód Cecha 1 Rok produkcji Cecha 2 Nr VIN Funkcja 1 Funkcja 2 Start Hamowanie 11

Analiza tekstowa Rzeczowniki określają klasy, czasowniki metody Klasy: drzwiczki, pilot, szczekanie psa, przycisk na pilocie Metody: otwórz, zamknij, sprawdź czy drzwiczki są otwarte 12

Typ wyliczeniowy // Typ wyliczeniowy 01 #include<iostream> using namespace std; enum Kolor { Trefl, Karo, Kier, Pik }; int main() { Kolor karta_1=pik; Kolor karta_2=karo; Kolor karta_3=trefl; Kolor karta_4=kier; cout<<karta_1<<"\t"<<karta_2<<"\t" <<karta_3<<"\t"<<karta_4<<endl; cout<<sizeof(karta_1)<<endl; } system("pause"); return 0; 13

3 1 0 2 4 Press any key to continue... // Tablice wyliczeniowe #include<iostream> using namespace std; enum Karta { Dwojka=2, Trojka, Czworka, Piatka, Szostka, Siodemka, Osemka, Dziewiatka, Dziesiatka, Walet, Dama, Krol, As}; 14

void main() { Karta Losuj[14]= { Dwojka, Trojka, Czworka, Piatka, Szostka, Siodemka, Osemka, Dziewiatka, Dziesiatka, Walet, Dama, Krol, As }; 15

//Losuj[14]=Losuj[3]+Losuj[6]; for (int i=0; i<14 ; i++) {cout<<losuj[i]<<endl;} } int wynik=losuj[3]+losuj[6]; cout<<wynik<<endl; system("pause"); return; 2 3 4 5 6 7 8 9 10 11 12 13 14 0 13 Press any key to continue... 16

Rzutowanie w C++ Mechanizm pozwalający na tymczasową lub stałą zmianę interpretacji obiektu przez kompilator nie powoduje rzeczywistej zmiany samego obiektu. Wymusza na kompilatorze interpretację obiektu w sposób przewidziany przez programistę. Dostępne operatory rzutowania: 1. static_cast 2. dynamic_cast 3. reinterpret_cast 4. const_cast typ_docelowy wynik = typ_rzutowania<typ_docelowy>(obiekt_do_rzutowania); 17

reinterpret_cast konwersja wskaźników między dowolnymi, nawet niepowiązanymi typami danych wymusza na kompilatorze dowolne rzutowanie - NIEZALECANE. const_cast wyłączenie modyfikatora dostępu const w obiekcie użycie może doprowadzić do nieprzewidzianego zachowania obiektu. 18

// Rzutowanie static_cast_1 #include<iostream> using namespace std; enum Karta { Dwojka=2, Trojka, Czworka, Piatka, Szostka, Siodemka, Osemka, Dziewiatka, Dziesiatka, Walet, Dama, Krol, As}; 19

void main() { Karta Losuj[15]= { Dwojka, Trojka, Czworka, Piatka, Szostka, Siodemka, Osemka, Dziewiatka, Dziesiatka, Walet, Dama, Krol, As }; Losuj[13]=static_cast<Karta>(Losuj[3]+Losuj[6]); Losuj[14]=static_cast<Karta>(Losuj[3]-Losuj[6]); 20

} for (int i=0; i<15 ; i++) {cout<<losuj[i]<<endl;} system("pause"); return; 2 3 4 5 6 7 8 9 10 11 12 13 14 13-3 Press any key to continue... 21

// Rzutowanie static_cast #include<iostream> using namespace std; int main() { char napis[15]={"abcdefgh"}; int a=napis[0]; cout<<a<<endl; napis[9]=char(a+a+1); cout<<napis[9]<<endl; cout<<"uzycie static_cast\n"; a=static_cast<int>(napis[0]); napis[10]=static_cast<char>(2*a+1); cout<<napis[10]<<endl; } system("pause"); return 0; 65 â Uzycie static_cast â Press any key to continue... 22

// Rzutowanie dynamic_cast #include<iostream> using namespace std; int main() { double pi=3.1415; double e=2.71; int suma=pi+e; cout<<suma<<endl; /*int suma1=dynamic_cast<int>(e)+dynamic_cast<int>(pi); cout<<suma1<<endl;*/ } system("pause"); return 0; 5 Press any key to continue... 23

1>dynamic.cpp 1>e:\praca\dydaktyka\programowanie obiektowe\visual project\wykład 2016\w_01_05\w_01_05\dynamic.cpp(14) : error C2680: 'int' : invalid target type for dynamic_cast 1> target type must be a pointer or reference to a defined class 1>e:\praca\dydaktyka\programowanie obiektowe\visual project\wykład 2016\w_01_05\w_01_05\dynamic.cpp(15) : error C2680: 'char' : invalid target type for dynamic_cast 1> target type must be a pointer or reference to a defined class 1>Build log was saved at "file://e:\praca\dydaktyka\programowanie obiektowe\visual Project\Wykład 2016\W_01_05\W_01_05\Debug\BuildLog.htm" 1>W_01_05-2 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 24

// Rzutowanie static_cast #include<iostream> using namespace std; int main() { double pi=3.1415; double e=2.71; int suma=pi+e; cout<<suma<<endl; int suma1=reinterpret_cast<int>(e)+reinterpret_cast<int>(pi); cout<<suma1<<endl; } system("pause"); return 0; 1>e:\praca\dydaktyka\programowanie obiektowe\visual project\wykład 2016\w_01_07\w_01_07\static.cpp(12) : error C2440: 'reinterpret_cast' : cannot convert from 'double' to 'int' 1> Conversion is a valid standard conversion, which can be performed implicitly or by use of static_cast, C-style cast or function-style cast 25

// Rzutowanie const_cast #include<iostream> using namespace std; int main() { const double pi=3.1415; //pi+=2; double pi_1=const_cast<double>(pi); cout<<pi<<endl; } system("pause"); return 0; 1>e:\praca\dydaktyka\programowanie obiektowe\visual project\wykład 2016\w_01_09\w_01_09\const.cpp(10) : error C2440: 'const_cast' : cannot convert from 'const double' to 'double' 1> Conversion is a valid standard conversion, which can be performed implicitly or by use of static_cast, C-style cast or function-style cast 26

Wskaźniki Zmienna przechowująca dane o adresie innej zmiennej określonego typu. Deklarowanie wskaźnika w C++ long *pnumber long* pnumber long *pnumber; number = 56; pnumber = &number &number Adres 1006 pnumber 1006 56 27

// Użycie wskaźników #include <iostream> using namespace std; int main() { long *pnumber=null; //Deklaracja inicjalizacja wskaźnika long number1=44, number2=88; pnumber=&number1; //adres do wskaźnika *pnumber+=11; //number1 + 11 cout << endl << " number1 = " << number1 << " pnumber = " << hex << pnumber; pnumber = &number2; //zmiana adresu number1 = *pnumber*10; //number2 * 10 cout << endl; cout<< " number1 = " << dec << number1 << " pnumber = " << hex << *pnumber << " *pnumber = " << dec <<*pnumber << endl; system("pause"); return 0; } 28

number1 = 55 pnumber = 0012FF54 number1 = 880 pnumber = 58 *pnumber = 88 Aby kontynuować, naciśnij dowolny klawisz... 29

// Użycie wskaźników #include <iostream> using namespace std; int main() { double zmienna_double=4.6; double *pdouble=0; pdouble=&zmienna_double; cout << pdouble <<endl; cout << *pdouble <<endl; pdouble=new double(23.5); cout << pdouble <<endl; cout << *pdouble <<endl; double nowa_zmienna=*pdouble; cout <<nowa_zmienna<<endl; pdouble=new double; 30

cout << pdouble <<endl; cout << *pdouble <<endl; *pdouble= 34.56; cout << pdouble <<endl; cout << *pdouble <<endl; cout<<endl; } 0024FB68 4.6 00784FB8 23.5 23.5 00785000-6.27744e+066 00785000 34.56 system ("pause"); return 0; Press any key to continue... 31