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

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

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.

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

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Plik klasy. h deklaracje klas

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

Zaawansowane programowanie w języku C++ Klasy w C++

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

Materiały do zajęć VII

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

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

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

dr inż. Jarosław Forenc

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

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

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

Programowanie obiektowe w języku

Programowanie, część I

TEMAT : KLASY POLIMORFIZM

Programowanie obiektowe w języku C++ Zarządzanie procesami. dr inż. Jarosław Forenc. Przeładowanie (przeciążanie) operatorów

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

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.

Programowanie obiektowe w C++ Wykład 12

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

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21

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

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

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

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody

Wstęp do Programowania 2

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) 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

Podstawy Programowania Obiektowego

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

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

Programowanie, część I

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

Projektowanie klas c.d. Projektowanie klas przykład

Wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Programowanie obiektowe

PARADYGMATY PROGRAMOWANIA Wykład 4

Informatyka 2. Wykład nr 3 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

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

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

Języki i paradygmaty programowania

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

Dziedziczenie jednobazowe, poliformizm

.NET Klasy, obiekty. ciąg dalszy

Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:

Enkapsulacja, dziedziczenie, polimorfizm

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

Programowanie obiektowe i C++ dla matematyków

Zwracanie obiektu. Funkcja może zwracać obiekty: #include"stdafx.h #include <iostream> using namespace std; class samp { inti; public:

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

Programowanie Obiektowe i C++

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

Wstęp do programowania obiektowego, wykład 7

PARADYGMATY PROGRAMOWANIA Wykład 3

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

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

Składnia C++ Programowanie Obiektowe, część 3 Mateusz Cicheński

Programowanie obiektowe i C++ dla matematyków

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. Metody stałe w klasie

Środowisko programistyczne GEANT4

Język C++ wykład VIII

Do czego służą klasy?

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

Co to jest klasa? Z programistycznego punktu widzenia klasa stanowi typ danych, który odwzorowuje wspólne cechy jakiegoś obiektu.

Programowanie Obiektowe i C++

Programowanie Obiektowew języku C++ Zadania L4

tel Konsultacje www

Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h

Konstruktor kopiujacy

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

Programowanie obiektowe język C++

Wstęp do Programowania 2

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

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

Wyliczanie wyrażenia obiekty tymczasowe

Programowanie 2. Język C++. Wykład Relacje między klasami, klasy zagnieŝdŝone, klasy lokalne

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

Mechanizm dziedziczenia

Język C++ Programowanie obiektowe

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

PARADYGMATY PROGRAMOWANIA Wykład 2

Imię i nazwisko: PYTANIA I ODPOWIEDZI Nr 0 EGZAMIN Język C++ 27 czerwca 2011

Pracownia specjalistyczna. Materiały przygotowali: mgr inż. Wojciech Frohmberg, mgr inż. Michał Kierzynka

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++

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

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

Informacja o programowaniu w c++ Dr Maciej Bobrowski

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Abstrakcyjny typ danych

Podstawy Programowania Obiektowego

TEMAT : KLASY DZIEDZICZENIE

Szablony klas, zastosowanie szablonów w programach

Transkrypt:

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

Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Konstruktory i destruktory Przeciążanie operatorów Słowo kluczowe this Poza paradygmatem PO Pola statyczne Przyjaciele Dodatkowe informacje Plan zajęć

class Player { player.h //pola i metody dostępne tylko dla klasy private: //pola i metody dostępne dla klasy i klas dziedziczących protected: //pola i metody ogólnodostępne public: ; Modyfikatory dostępu

//elementy dziedziczone po klasie nadrzędnej //dostępne tylko dla tej klasy (private) class SoccerPlayer : private Player { ; soccerplayer.h //elementy dziedziczone po klasie nadrzędnej soccerplayer.h //dostępne dla tej klasy i klas dziedziczących (protected) class SoccerPlayer : protected Player { ; //elementy dziedziczone po klasie nadrzędnej //nie zmieniają typu swojej dostępności class SoccerPlayer : public Player { ; soccerplayer.h Modyfikatory dostępu dziedziczenia

class Player { public: int play(); ; #include player.h player.h player.cpp int Player::play() { return -1; #include player.h soccerplayer.h class SoccerPlayer : public Player { ; Elementy składowe klasy

#include <iostream> #include player.h #include soccerplayer.h main.cpp using namespace std; int main (int argc, char** argv) { Player player; SoccerPlayer soccerplayer; cout << player.play() << endl; cout << soccerplayer.play() << endl; return 0; $./main -1-1 output Wykorzystanie klas

#include Player.h class SoccerPlayer : public Player { protected: int energy; public: int play(); ; soccerplayer.h #include soccerplayer.h soccerplayer.cpp int SoccerPlayer::play() { return (energy > 0? 1 : 0); $./main -1 0 output Przesłanianie metod

#include <iostream> #include player.h #include soccerplayer.h main.cpp using namespace std; int main (int argc, char** argv) { Player player; SoccerPlayer soccerplayer; Player *pointer = NULL; pointer = &player; cout << pointer->play() << endl; pointer = &soccerplayer; cout << pointer->play() << endl; return 0; $./main -1-1 output Wskaźniki

Wyrażenie Interpretacja *x Obiekt wskazywany przez x &x x.y x->y (*x).y x[0] x[1] x[n] *(x+n) Adres w pamięci dla x Pole y obiektu x Pole y obiektu wskazywanego przez x jw. Pierwszy obiekt wskazywany przez x Drugi obiekt wskazywany przez x (n+1) obiekt wskazywany przez x jw. Wskaźniki c.d.

class Player { public: virtual int play(); ; player.h $./main -1 0 output Metody wirtualne

class Player { protected: int type; public: virtual int play() = 0; ; #include player.h player.h player.cpp Metody abstrakcyjne (klasy abstrakcyjne)

class IPlayer { public: virtual int play() = 0; ; player.h Interfejsy

class Player { public: Player(); virtual int play(); ; #include player.h player.h player.cpp Player::Player() { int Player::play() { return -1; Konstruktor bezargumentowy (domyślny)

#include player.h soccerplayer.h class SoccerPlayer : public Player { protected: int energy; public: SoccerPlayer(int energy); int play(); ; #include soccerplayer.h soccerplayer.cpp SoccerPlayer::SoccerPlayer(int energy) { this->energy = energy; int SoccerPlayer::play() { return (energy > 0? 1 : 0); Konstruktor z argumentami

#include soccerplayer.h soccerplayer.cpp SoccerPlayer::SoccerPlayer(int energy) : Player() { this->energy = energy; int SoccerPlayer::play() { return (energy > 0? energy : 0); Wywołanie konstruktora klasy nadrzędnej

#include soccerplayer.h striker.h class Striker : public SoccerPlayer { public: Striker(int energy); ; #include striker.h #include <iostream> striker.cpp Striker::Striker(int energy) : SoccerPlayer(energy * 10) { Wywołanie konstruktora klasy nadrzędnej c.d.

#include <iostream> #include player.h #include soccerplayer.h #include striker.h main.cpp using namespace std; int main (int argc, char** argv) { Player player; SoccerPlayer soccerplayer(2); Striker *lewandowski = new Striker(2); cout << player.play() << endl; cout << soccerplayer.play() << endl; cout << lewandowski->play() << endl; return 0; $./main -1 2 20 output Użycie konstruktorów

#include player.h soccerplayer.h class SoccerPlayer : public Player { protected: int energy; public: SoccerPlayer(int energy); SoccerPlayer(const SoccerPlayer &soccerplayer); ; #include soccerplayer.h #include <iostream> soccerplayer.cpp SoccerPlayer::SoccerPlayer(int energy) { this->energy = energy; SoccerPlayer::SoccerPlayer(const SoccerPlayer &soccerplayer) { energy = soccerplayer.energy; std::cout << SoccerPlayer copy constructor << std::endl; Konstruktor kopiujący

#include <iostream> #include soccerplayer.h main.cpp using namespace std; int main (int argc, char** argv) { SoccerPlayer soccerplayer(2); SoccerPlayer copy(soccerplayer); return 0; $./main SoccerPlayer copy constructor output Konstruktor kopiujący c.d.

class Player { public: Player(); ~Player(); virtual int play(); ; #include player.h #include <iostream> player.h player.cpp Player::Player() { Player::~Player() { std::cout << Player destroyed << std::endl; int Player::play() { return -1; Destruktor

#include soccerplayer.h striker.h class Striker : public SoccerPlayer { public: Striker(int energy); ~Striker(); ; #include striker.h #include <iostream> striker.cpp Striker::Striker(int energy) : SoccerPlayer(energy) { Striker::~Striker() { std::cout << Striker destroyed << std::endl; Destruktor c.d.

#include <iostream> #include player.h #include soccerplayer.h #include striker.h main.cpp using namespace std; int main (int argc, char** argv) { Player *player = new Striker(2); delete player; return 0; $./main Player destroyed output Destruktor wyciek pamięci

class Player { public: Player(); virtual ~Player(); virtual int play(); ; #include player.h #include <iostream> player.h player.cpp Player::Player() { Player::~Player() { std::cout << Player destroyed << std::endl; int Player::play() { return -1; Wirtualny destruktor

#include <iostream> #include player.h #include soccerplayer.h #include striker.h main.cpp using namespace std; int main (int argc, char** argv) { Player *player = new Striker(2); delete player; return 0; $./main Striker destroyed Player destroyed Wirtualny destruktor c.d. output

#include player.h soccerplayer.h class SoccerPlayer : public Player { protected: int energy; public: int play(); SoccerPlayer operator + (SoccerPlayer soccerplayer); ; #include soccerplayer.h soccerplayer.cpp int SoccerPlayer::play() { return (energy > 0? 1 : 0); SoccerPlayer SoccerPlayer::operator+ (SoccerPlayer soccerplayer) { SoccerPlayer temp; temp.energy = energy + soccerplayer.energy; return temp; Przeciążenie operatorów

Składnia: typ operator symbol (parametr) { Symbole operatorów do przeciążenia + - * / = < > += -= *= /= << >> <<= >>= ==!= <= >= ++ -- % & ^! ~ &= ^= = && %= [] (), ->* -> new delete new[] delete[] Tabela operatorów do przeciążenia

Wyrażenie Operator Jako metoda klasy @a + - * &! ~ ++ - - A::operator@() Jako funkcja globalna operator@(a) a@ ++ -- A::operator@(int) operator@(a,int) a@b + - * / % ^ & < > ==!= <= >= << >> &&, a@b = += -= *= /= %= ^= &= = <<= >>= [] A::operator@(B) A::operator@(B) operator@(a,b) Przeciążenie wybranych symboli

#include player.h soccerplayer.h class SoccerPlayer : public Player { protected: int energy; public: SoccerPlayer& operator = (const SoccerPlayer &soccerplayer); ; #include soccerplayer.h #include <iostream> soccerplayer.cpp SoccerPlayer& SoccerPlayer::operator= (const SoccerPlayer &soccerplayer) { energy = soccerplayer.energy; std::cout << SoccerPlayer copy assignment << std:endl; return *this; Słowo kluczowe this

#include <iostream> #include soccerplayer.h main.cpp using namespace std; int main (int argc, char** argv) { SoccerPlayer soccerplayer(2); SoccerPlayer copy = soccerplayer; return 0; $./main output Słowo kluczowe this c.d.

#include <iostream> #include soccerplayer.h main.cpp using namespace std; int main (int argc, char** argv) { SoccerPlayer soccerplayer(2); //SoccerPlayer copy = soccerplayer; NIE! SoccerPlayer copy; copy = SoccerPlayer; return 0; $./main SoccerPlayer copy assignment output Słowo kluczowe this c.d.

class Player { public: Player(); virtual ~Player(); static int count; virtual int play(); ; #include player.h player.h player.cpp int Player::count = 0; Player::Player() { count++; Player::~Player() { count--; int Player::play() { return -1; Pola statyczne

#include <iostream> #include player.h #include soccerplayer.h main.cpp using namespace std; int main (int argc, char** argv) { Player player; SoccerPlayer *soccerplayer; cout << Player::count << endl; delete soccerplayer; cout << Player::count << endl; return 0; $./main 2 1 output Pola statyczne c.d.

#include soccerplayer.h striker.h class OtherStriker; class Striker : public SoccerPlayer { public: Striker(int energy); ~Striker(); friend class OtherStriker; ; Przyjaciele klasy

class Striker; otherstriker.h class OtherStriker { private: int stamina; public: void convert(striker &striker); ; #include otherstriker.h #include striker.h otherstriker.cpp void OtherStriker::convert(Striker &striker) { stamina = striker.energy; Przyjaciele klasy c.d.

class Striker; otherstriker.h class OtherStriker { private: int stamina; public: void convert(striker &striker); friend int getstamina(otherstriker striker); ; Przyjaciele funkcje

#include <iostream> #include striker.h #include otherstriker.h main.cpp using namespace std; int getstamina(otherstriker striker) { return striker.stamina; int main (int argc, char** argv) { OtherStriker otherstriker; Striker striker(2); otherstriker.convert(striker); cout << getstamina(otherstriker) << endl; return 0; $./main 20 Przyjaciele funkcje c.d. output

Domyślny modyfikator dostępu: private Domyślnie dla danej klasy kompilator generuje: konstruktor bezargumentowy, konstruktor kopiujący destruktor operator przypisania (=) z parametrem w postaci implementowanej klasy Ale: definicja dowolnego konstruktora powoduje, że kompilator nie generuje konstruktora bezargumentowego Dodatkowe informacje

W ramach statycznej metody klasy nie można odwoływać się do pól właściwych dla instancji klasy (jedynie do pól statycznych) Pola/metody statyczne w klasie posiadają modyfikatory dostępu Przyjaciel mojego przyjaciela nie jest moim przyjacielem relacja nie jest przechodnia Przyjaciel nie jest relacją symetryczną Dodatkowe informacje c.d.

Pytania? http://bit.ly/oop2015