Programowanie w języku C++

Wielkość: px
Rozpocząć pokaz od strony:

Download "Programowanie w języku C++"

Transkrypt

1 Katedra Informatyki Stosowanej Politechniki Łódzkiej mgr inż. Tomasz Jaworski Programowanie w języku C++ Al. Politechniki 11, Łódź ul. Stefanowskiego 18/22, Łódź tjaworski@kis.p.lodz.pl

2 Programowanie w języku C Od programowania proceduralnego do obiektowego Konstruując program zawsze napotkamy problem definiowania przedmiotów, których opisem program się ten zajmuje. Przez przedmiot należy tu rozumieć zarówno zjawiska, jak i przedmioty rzeczywiste opisywane przez program oraz struktury danych wykorzystywane do tego opisu. W odniesieniu do sposobu definiowania przedmiotów wykształciły się dwa zasadnicze podejścia: proceduralne: Tworzymy strukturę zawierającą parametry definiujące przedmiot i jego stan, a odseparowane funkcje określają jego właściwości. Rozpatrzmy prosty przykład: w celu zdefiniowania punktu na ekranie wystarczy utworzyć następującą strukturę: struct punkt int x, y; ; Wyświetlenie punktu na ekranie umożliwi następująca funkcja: void Narysuj(struct punkt P) //ciało funkcji obiektowe: Dane definiujące przedmiot i metody określające jego właściwości umieszczamy we wspólnym miejscu klasie. W ten sposób następuje integracja danych i metod uprawnionych do ich wykorzystania. Rozpatrzmy ten sam problem, co w przypadku podejścia proceduralnego. class PUNKT int x, y; void Narysuj(void); ; Zdefiniowana powyżej klasa PUNKT zawiera zarówno dane definiujące punkt na ekranie, jak I funkcję pozwalającą na jego wyświetlenie. Definicja przedmiotu i jego właściwości znalazła się w ten sposób w jednym miejscu. Programowanie obiektowe umożliwia: tworzenie programowych modeli przedmiotów poprzez łączenie danych i metod uprawnionych do ich wykorzystania, wspólny opis całych klas przedmiotów, zjawisk i problemów.

3 Programowanie w języku C Definiowanie przedmiotów klasy i obiekty Podstawowym pojęciem języka C++ jest klasa. Dla jej opisu konieczne są dwa zasadnicze elementy: dane charakteryzujące przedmiot, funkcje określające jego właściwości. Jak łatwo się domyśleć elementy te muszą znaleźć się w definicji klasy. Definicja klasy rozpoczyna się od tak zwanego słowa kluczowego klasy, którym może być jedno ze słów class, struct, union. Najczęściej wykorzystywane jest słowo kluczowe class. W ciele definicji klasy mogą znaleźć się: deklaracje danych składowych deklaracje i definicje funkcji składowych Wymienione powyżej elementy rozmieszcza się wekcjach definicji klasy, co ilustruje poniższy schemat: class Klasa protected: private:... //funkcje i dane składowe publiczne... //funkcje i dane składowe zabezpieczone... //funkce i dane składowe prywatne ; Specyfikatory atrybutów dostępu mogą być używane wielokrotnie w obrębie definicji klasy. Umieszczając poszczególne elementy definicji klasy w sekcjach określamy, które funkcje programu mają prawo się do nich odwołać. Reguły dostępności mają się następująco: Sekcja prywatna (private) Składowe prywatne widoczne są tylko w obrębie funkcji składowych danej klasy. Jeśli klasa jest definiowana ze słowem kluczowym class, składowe są domyślnie prywatne. Dane składowe definiujemy jako prywatne zwykle w jednej z następujących sytuacji: zmiana wartości składowej przez niepowołaną do tego funkcję zewnętrzną jest ryzykowna lub zmianie tej powinno towarzyszyć wykonanie ściśle określonych czynności. W takiej sytuacji powinna istnieć specjalna funkcja umożliwiająca takie przypisanie, realizująca jednocześnie te operacje, składowa jest przeznaczona tylko do wewnętrznego wykorzystania przez funkcje składowe klasy. Funkcje definiujemy jako prywatne, gdy: ich wywołanie przez funkcje zewnętrzne jest niewskazane, gdy realizują pewien fragment algorytmu i ich wywołanie z zewnątrz nie ma sensu. Sekcja zabezpieczona (protected) Składowe zabezpieczone są widoczne tylko w obrębie funkcji składowych danej klasy i klas wyprowadzonych. Składowe definiujemy jako zabezpieczone, gdy ich użycie nie jest obarczone tak silnymi restrykcjami, jak ma to miejsce w przypadku składowych prywatnych. Funkcje określamy jako zabezpieczone, jeśli dostęp do nich z zewnątrz nie jest wymagany, zaś konieczny jest dostęp do analogicznych funkcji składowych odziedziczonych po przodkach. Sekcja publiczna (public)

4 Programowanie w języku C++ 4 Składowe publiczne widoczne są w obszarze całego pliku. Publiczne funkcje składowe służą zwykle do sterowania, zmiany parametrów i komunikacji z obiektem. Dane składowe definiuje się jako publiczne w przypadku prostych klas, gdy zmiana wartości pola nie musi być związana z wykonaniem jakichś dodatkowych czynności.!!! DEFINICJA KLASY POWINNA KOŃCZYĆ SIĘ ŚREDNIKIEM!!! Sposób definiowania funkcji zadeklarowanych, lecz nie zdefiniowanych w ciele klasy rozpatrzymy na przykładzie funkcji Rysuj klasy PUNKT. void PUNKT::Rysuj(void) //ciało funkcji Jako nazwę funkcji podajemy nazwę klasy, po której następuje tzw. kwalifikator zakresu (::), a następnie nazwę definiowanej funkcji składowej. 3. Konstruktory i destruktory Idea i budowa konstruktorów Okazuje się, że oprócz deklarowanych funkcji składowych istnieją jeszcze dwie specjalne funkcji, które są albo definiowane przez programistę, albo generowane przez kompilator (jeśli nie zostały wcześniej zdefiniowane). Są to konstruktory i destruktory. Konstruktor jest specjalną, najczęściej przeciążoną funkcją składową wywoływaną niejawnie zawsze wtedy, gdy zachodzi konieczność utworzenia obiektu danej klasy. Deklarowanie i definiowanie konstruktorów podlega niemal tym samym zasadom, co każda zwyczajna funkcja składowa z tym, że: W deklaracji konstruktora nie wolno określać typu zwracanej wartości. Niedozwolony jest nawet specyfikator void, Konstruktory nie mogą być wywoływane tak jak inne funkcje, gdyż są wywoływane niejawnie w czasie tworzenia obiektu, a wybór odpowiedniego konstruktora jest dokonywany na podstawie typów parametrów przekazanych w czasie tworzenia obiektu, Konstruktory nie są dziedziczone, Identyfikator konstruktora musi być identyczny z identyfikatorem klasy, Nie można pobrać adresu konstruktora, Konstruktor nie może być wirtualny. Dwa typy konstruktorów pełnią szczególną rolę: tzw. konstruktor domyślny, czyli bezparametrowy i konstruktor kopiujący. Jeżeli w klasie nie zdefiniowano żadnego konstruktora, to kompilator utworzy własny konstruktor bezparametrowy i kopiujący. Konstruktor służy przede wszystkim do inicjacji danych składowych obiektu. Inicjacji tej można dokonać w dwojaki sposób: dokonując bezpośrednich przypisań w ciele definicji konstruktora, bezpieczniejsze i zgodniejsze z duchem języka C++ jest jednak posłużenie się tzw. listą inicjacyjną. Elementy listy inicjacyjnej przypominają sposób, w jaki inicjowane są obiekty.

5 Programowanie w języku C++ 5 Przykład: Definicje konstruktorów class PUNKT private: int x, y; unsigned kolor; ciele funkcji PUNKT(void) x=0; y=0; kolor=0; //bezpośrednie przypisania w PUNKT(int _x, int _y, unsigned _kolor = 0); PUNKT(unsigned _kolor); void UstalWsp(int _x, int _y); void UstalKol(unsigned _kolor); void Rysuj(void); ; PUNKT::PUNKT(int _x, int _y, unsigned _kolor): x(_x), y(_y), kolor(_kolor) //lista inicjacyjna PINKT::PUNKT(unsigned _kolor): x(0), y(0), kolor(_kolor) Definicję klasy PUNKT uzupełniono o następujące konstruktory: PUNKT(void); konstruktor domyślny, bezparametrowy, PUNKT(int _x, int _y, unsigned _kolor=0); - konstruktor o trzech parametrach całkowitych, z możliwością przyjęcia domyślnej wartości (zero) ostatniego, PUNKT(unsigned _kolor); - konstruktor z jednym parametrem całkowitym oznaczającym kolor punktu. Konstruktor, zgodnie z nazwą, jest wywoływany podczas tworzenia obiektu danej klasy. Definicja obiektu klasy zawierającej konstruktory może być połączona z jego inicjacją. PUNKT P1, //konstruktor bezparametrowy P2(1, 1), //konstruktor trójparametrowy, trzeci parametr domyślny P3(10, 10, 5), //konstruktor trójparametrowy P4(1), tab[10]; //konstruktor jednoparametrowy //konstruktor bezparametrowy (10x) Jeżeli klasa zawiera jakikolwiek konstruktor zdefiniowany przez programistę, wówczas kompilator nie wygeneruje automatycznie nawet konstruktora domyślnego. Dobrą zasadą zatem jest, że gdy klasa zawiera jakiś konstruktor, należy również zdefiniować ten bezparametrowy. Należy unikać niejednoznaczności, np.:

6 Programowanie w języku C++ 6 class X X(void); X(int j=2); ; X obj; Jeśli spróbujemy utworzyć obiekt obj klasy X w powyższy sposób, kompilator nie będzie wiedział, który z konstruktorów klasy X ma zostać użyty. Konstruktory kopiujące. Powielanie obiektów Konstruktorem kopiującym klasy X nazywamy konstruktor o jednym parametrze typu referencja klasy X np.: X(const &X); X(const &X, int I = 0); Konstruktor kopiujący jest wywoływany zawsze, gdy zachodzi konieczność skopiowania obiektu danej klasy do innego obiektu tejże klasy choćby podczas inicjacji obiektu innym obiektem, np.: X x = y; Jeśli konstruktor kopiujący nie został zdefiniowany jawnie, kompilator wygeneruje własny. Konstruktor kopiujący definiujemy samodzielnie wówczas, gdy podczas kopiowania obiektów zachodzi konieczność wykonania jakiejś dodatkowej operacji, np. skopiowania związanych z danym obiektem dynamicznych struktur danych. W tym przypadku brak kopiowania danych mogło by spowodować, że dynamiczne obiekty, o których mowa, operowały by na tym samym obszarze pamięci, co nie zawsze jest wymagane. Destruktory Zawsze przed usunięciem obiektu z pamięci wywoływana jest niejawnie specjalna funkcja składowa zwana destruktorem. Jeśli nie została ona zadeklarowana jawnie w obrębie definicji klasy, kompilator wygeneruje własny destruktor. Destruktor jest funkcją o następujących własnościach: nazwą destruktora jest nazwa klasy poprzedzona znakiem tyldy (~), nie wolno określać typu zwracanego przez destruktor, nie jest dozwolony nawet specyfikator void, destruktor może być wywoływany przy użyciu pełnej kwalifikowanej jego nazwy. W celu wywołania destruktora klasy X należy użyć formuły: X::~X(); Destruktor służy do wykonania niezbędnych operacji przed usunięciem obiektu z pamięci. Operacje te mogą być różnorodne: usunięcie z ekranu figury, zwolnienie pamięci dla dynamicznych struktur danych itp.

7 Programowanie w języku C Zmienna this Weźmy pod uwagę definicję klasy PUNKT (nieco uproszczoną): class PUNKT int x, y; void UstalWsp(int i, int j) x = I; y = j; P, Q; oraz obiekty P i Q. Zwróćmy uwagę, że wywołania P.UstalWsp(1, 10); Q.UstalWsp(2, 13); nadają wartości składowym odpowiednio obiektom P i Q. Jak widać ta sama funkcja nadaje wartości składowym różnych obiektów. Rodzi się więc pytanie, w jaki sposób odwołania do składowych są wiązane z konkretnymi obiektami. Okazuje się, że wszystkie niestatyczne funkcje składowe otrzymują niejawny parametr this, który wskazuje obiekt, na rzecz którego zostały wywołane. W zwiąsku z tym ciało funkcji UstalWsp w zasadzie wygląda nastepujaco: void PUNKT::UstalWsp(int i, int j) this->x = i; this->y = j; Normalnie operacja this-> jest wykonywana niejawnie. Wskaźnik this ma różne zastosowania. Można go wykorzystywać do zwracania referencji obiektu, dla którego została wywołana dana funkcja składowa, np.: class PUNKT PUNKT& UstalWsp(int i, int j); ; PUNKT& PUNKT::UstalWsp(int i, int j) x = i; y = j; return *this; //zwróć referencję do danego obiektu

8 Programowanie w języku C Funkcje i klasy zaprzyjaźnione W niektórych sytuacjach może zachodzić konieczność postępowania niezgodnego z regułami określonymi atrybutami dostępu lub postępowanie takie może znacznie uprościć zapis algorytmu, powodując wygenerowanie bardziej efektywnego kodu wynikowego. Aby zezwolić funkcji zdefiniowanej poza klasą na dostęp do jej składowych prywatnych i zabezpieczonych, trzeba określić relacją przyjaźni między funkcją a tą klasą. Funkcja zaprzyjaźniona (ang. friend) z klasą, mimo że nie jest składową tej klasy, posiada pełne prawa dostępu do wszystkich składowych tej klasy. Relację przyjaźni między funkcją a klasą ustanawia się poprzez umieszczenie deklaracji tej funkcji poprzedzonej słowem kluczowym friend w ciele definicji klasy. class STRING private: char *Str; friend void Drukuj(STRING &); //definicje konstruktorów i destruktora ; void Drukuj(STRING &S) cout << \n << S.Str; main() STRING Imie( Radosław ); Drukuj(Imie); return 0; Dzięki ustaleniu relacji przyjaźni pomiędzy klasą STRING a funkcją Drukuj dozwolony jest w jej ciele dostęp do składowych prywatnych tej klasy. Relację przyjaźni można ustalić również pomiędzy dwiema klasami. Wszystkie funkcje składowe klasy zaprzyjaźnionej z daną mają prawo dostępu do wszystkich komponentów tej klasy, z którą są zaprzyjaźnione. Należy pamiętać, że relacja przyjaźni nie ma odwrotności.

9 Programowanie w języku C++ 9 class STRING private: char *Str; //definicje konstruktorów i destruktora friend class STR_STREAM; ; class STR_STREAM void Out(STRING &S) cout << \n << S.Str; ; main() STRING S( Ala ma kota ); STR_STREAM Str; Str.out(S); return 0; Deklaracje klas i funkcji zaprzyjaźnionych mogą znaleźć się w dowolnej sekcji definicji klasy nie ma to żadnego wpływu na relację przyjaźni.

10 Programowanie w języku C Funkcje operatorowe Język C++ oprócz możliwości tworzenia różnych obiektów pozwala na definiowanie operatorów wykonujących działania na tych obiektach (klasach). Dzięki temu dodawanie wektorów czy łączenie łańcuchów znakowych może zyskać naturalny wygląd (np. jak każda inna operacja matematyczna). Załóżmy, że obiekty klasy WEKTOR reprezentują wektory na płaszczyźnie. Przedstawiona poniżej funkcja main wykonuje działania na obiektach tej klasy. liczbę int main(void) WEKTOR U(1,5), V(2,3), X(-2,1), Z(10,-3); X = U + V; Z = X 5 * V; return 0; //dodawanie wektorów //odejmowanie wektorów i mnożenie wektora przez Normalnie próba wykonania takich operacji na obiektach zakończyła by się komunikatem o błędzie. Aby tego uniknąć, należy zdefiniować takie operatory. Operatory standardowe i przeciążone Język C++ zawiera pewien, dość obszerny zasób operatorów umożliwiających wykonanie operacji na danych typów całkowitych, rzeczywistych oraz operatory indeksowania, wywołania funkcji, dostępu do składowych oraz dynamicznego przydziału pamięci i in. Większość wymienionych operatorów może zostać zdefiniowana dla operandów innych typów. Operację taką nazywamy przeciążaniem operatorów, podobnie jak zdefiniowanie funkcji o tej samym identyfikatorze, ale innych parametrach wejściowych. Spośród całego zbioru operatorów tylko cztery, podobnie jak symbole preprocesora (#, ##), nie podlegają przeciążaniu:..* ::?: Przeciążanie operatorów polega na zdefiniowaniu tzw. funkcji operatorowej. Identyfikatorem funkcji operatorowej jest zawsze słowo kluczowe operator, bezpośrednio po którym wymieniony jest symbol operatora, np.: operator+, operator-, operator<< Funkcja operatora może być: - niestatyczną funkcją składową klasy, na obiektach których działa operator, - funkcją nie będącą składową klasy najczęściej zaprzyjaźnioną, - statyczną funkcją składową klasy. O tym, z którym z wymienionych powyżej przypadków mamy do czynienia, decyduje rodzaj przeciążanego operatora. Operatory jednoargumentowe Operator jednoargumentowy (binarny) można zdefiniować jako: - niestatyczną, bezparametrową funkcję składową klasy, - funkcję o jednym argumencie, nie będącą składową klasy. Stąd wynika, że poniższe wywołanie operatora jednoargumentowego ++: ++X; lub X++;

11 Programowanie w języku C++ 11 może być traktowane jako: X.operator++() lub operator++(x);, gdzie X to klasa, której funkcją składową jest operator++ lub na której on działa. Jak widać istnieje możliwość zdefiniowania rodzaju operatora jako przed- lub przyrostkowy. Operator przedrostkowy definiujemy tak, jak to przedstawiono dotychczas, przyrostkowy zaś, deklarując go, jako niestatyczną funkcję składową o jednym parametrze o jednym parametrze typu int lub jako funkcję o jednym parametrze danej klasy i dodatkowym parametrze typu int. Parametr ten stanowi dodatkową informację, pozwalającą kompilatorowi na rozróżnienie wersji przed- i przyrostkowej operatora. Zmianie podlega również fakt, iż w przypadku standardowych przyrostkowych operatorów in- i dekrementacji, kiedy to żądana operacja stosowana była dopiero po obliczeniach, dla operatorów przeciążanych jest ona stosowana natychmiast. Przykład. class INTEGER ; int val; INTEGER(int v=0): val(v) INTEGER &operator++() val++; return *this; //przedrostkowy friend INTEGER &operator++(integer &, int); //przyrostkowy void Out(void) cout << \n << val; INTEGER &operator++(integer &a, int) a.val+=2; return a; main() INTEGER a(1), b(2); ++a; b++; a.out(); b.out(); //użycie operatora przedrostkowego //użycie operatora przyrostkowego Operatory dwuargumentowe Operatory dwuargumentowe należą do najczęściej przeciążanych i można je definiować jako: - niestatyczną funkcję składową wówczas działanie Y, - operator dwuargumentowy traktujemy jako: X.operator@(Y), - dwuparametrową funkcję nie będącą składową klasy, na której operacje będą wykonywane działanie Y interpretujemy wówczas jako operator@(x, Y).

12 Programowanie w języku C++ 12 Obie metody definiowania operatorów dwuargumentowych są tożsamościowe pod warunkiem odpowiedniego ich użycia, co pokazano w poniższym przykładzie. Przykład. class WEKTOR WEKTOR(void): X(0), Y(0) ; WEKTOR(double X, double Y): X(_X), Y(_Y) WEKTOR operator+(wektor&); friend WEKTOR operator-(wektor&, WEKTOR&); friend WEKTOR operator*(double, WEKTOR&); friend ostream &operator<<(ostream&, WEKTOR&); private: double X, Y; ; WEKTOR WEKTOR::operator+(WEKTOR &U) return WEKTOR(this->X + U.X, this->y + U.Y); WEKTOR operator-(wektor &U, WEKTOR &V) return WEKTOR(U.X + V.X, U.Y + V.Y); WEKTOR operator*(double k, WEKTOR &U) return WEKTOR(k * U.X, k * U.Y); ostream &operator<<(ostream &St, WEKTOR &U) St << [ << U.X <<, << U.Y << ] ; return St; main() WEKTOR A(1, 1), B(5, 5), C(-3, 3);

13 Programowanie w języku C++ 13 return 0; cout << \n << A + B << \n << A B << \n << 2*C + A; W powyższym przykładzie zdefiniowano klasę WEKTOR, reprezentującą wektor o współrzędnych rzeczywistych (double), a następnie zdefiniowano operatory dwuargumentowe umożliwiające dodawanie, odejmowanie oraz mnożenie wektora przez liczbę. Operator dodawania + zdefiniowano jako niestatyczną funkcję składową, zaś operatory odejmowania i mnożenia jako funkcje zaprzyjaźnione z klasą WEKTOR. Przedstawiony sposób definiowania operatorów dwuargumentowych może być traktowany jako wzorzec postępowania przy takiej okazji. Zdefiniowanie operatora << umożliwia zapis wektora w strumieniu wyjściowym (tu ekran). W wyniku wykonania programu zostaną wyprowadzone następujące napisy: [6, 6] [-4 4] [-5, 7] Istnieje możliwość definiowania operatorów dwuargumentowych na dwa sposoby tak jak to przedstawiono powyżej. Wszelkie niejednoznaczności są rozstrzygane przez standardowe dopasowanie argumentów. Operatory dwuargumentowe zdefiniowane jako niestatyczne funkcje składowe klasy podlegają dziedziczeniu przy wyprowadzaniu klas potomnych z danej. Operatory przypisania Każdy z operatorów przypisania: = *= /= %= += -= <<= >>= &= ^= = może zostać zdefiniowany wyłącznie jako niestatyczna funkcja składowa. Operatory przypisania nie są dziedziczone przez klasy wyprowadzone z tej, dla której zostały zdefiniowane. W poniższej definicji klasy wykorzystano funkcje składowe z przykładu poprzedniego. Dodano definicję operatorów przypisania: +=, -=, *=; class WEKTOR WEKTOR(void): X(0), Y(0) ; WEKTOR(double X, double Y): X(_X), Y(_Y) WEKTOR operator+(wektor&); friend WEKTOR operator-(wektor&, WEKTOR&); friend WEKTOR operator*(double, WEKTOR&); friend ostream &operator<<(ostream&, WEKTOR&); WEKTOR &operator+=(wektor&); WEKTOR &operator-=(wektor&); WEKTOR &operator*=(double); private: double X, Y; ;

14 Programowanie w języku C++ 14 WEKTOR &WEKTOR::operator+=(WEKTOR &U) this->x += U.X; this->y += U.Y; return *this; WEKTOR &WEKTOR::operator-=(WEKTOR &U) this->x -= U.X; this->y -= U.Y; return *this; WEKTOR &WEKTOR::operator*=(double s) this->x *= s; this->y *= s; return *this; main() C += A + B; WEKTOR A(10, 10), B(-5, 4), C(0, 0); cout << C << \n ; cout << C << \n ; C *= -2; cout << C << \n ; C -= A; cout << C << \n ; return 0; W efekcie wykonania programu zostaną wyprowadzona następujące rezultaty: [0, 0] [5, 14] [-10, -28] [-20, -38]

TEMAT : KLASY DZIEDZICZENIE

TEMAT : KLASY DZIEDZICZENIE TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą

Bardziej szczegółowo

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów

Bardziej szczegółowo

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

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? 1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie

Bardziej szczegółowo

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE WSKAŹNIKI KLASOWE Wskaźniki klasowe Każdy obiekt zajmuje fragment pamięci i wszystkie obiekty tego samego typu zajmują fragmenty pamięci tej samej długości początek miejsca w pamięci zajmowanego przez

Bardziej szczegółowo

Język C++ Programowanie obiektowe

Język C++ Programowanie obiektowe Język C++ Programowanie obiektowe Cechy programowania obiektowego abstrakcyjne typy danych hermetyczność obiektów (kapsułkowanie) dziedziczenie polimorfizm Programowanie proceduralne vs. programowanie

Bardziej szczegółowo

Przeciążanie operatorów

Przeciążanie operatorów Instrukcja laboratoryjna nr 4 Programowanie w języku C 2 (C++ poziom zaawansowany) Przeciążanie operatorów dr inż. Wilk-Jakubowski Jacek mgr inż. Lasota Maciej dr inż. Kaczmarek Tomasz Wprowadzenie Oprócz

Bardziej szczegółowo

Wykład 5: Klasy cz. 3

Wykład 5: Klasy cz. 3 Programowanie obiektowe Wykład 5: cz. 3 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD - podstawy Konstruktor i destruktor (część I) 2 Konstruktor i destruktor KONSTRUKTOR Dla przykładu

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij. Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice

Bardziej szczegółowo

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

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static), Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których

Bardziej szczegółowo

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

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej

Bardziej szczegółowo

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

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost; Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze

Bardziej szczegółowo

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class

Bardziej szczegółowo

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

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this Wstęp do programowania obiektowego WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this 1 Nazwa typu Rozmiar Zakres Uwagi bool 1 bit wartości true albo false stdbool.h TYPY ZNAKOWE

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 3

PARADYGMATY PROGRAMOWANIA Wykład 3 PARADYGMATY PROGRAMOWANIA Wykład 3 Definiowanie operatorów i ich przeciążanie Przykłady zastosowania operatorów: a) operator podstawienia ( = ) obiektów o złożonej strukturze, b) operatory działania na

Bardziej szczegółowo

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

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja

Bardziej szczegółowo

C++ Przeładowanie operatorów i wzorce w klasach

C++ Przeładowanie operatorów i wzorce w klasach C++ i wzorce w klasach Andrzej Przybyszewski numer albumu: 89810 14 listopada 2009 Ogólnie Przeładowanie (przeciążanie) operatorów polega na nadaniu im nowych funkcji. Przeładowanie operatora dokonuje

Bardziej szczegółowo

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu. Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody

Bardziej szczegółowo

Programowanie Obiektowe i C++

Programowanie Obiektowe i C++ Programowanie Obiektowe i C++ Marcin Benke Instytut Informatyki UW 30.10.2006 Marcin Benke (IIUW) Programowanie Obiektowe i C++ 30.10.2006 85 / 112 Zgodność typów Rozważmy klasy class A { //... }; class

Bardziej szczegółowo

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 4. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Przeciążanie operatorów Funkcje zaprzyjaźnione Na

Bardziej szczegółowo

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja

Bardziej szczegółowo

Do czego służą klasy?

Do czego służą klasy? KLASY Dorota Pylak 2 Do czego służą klasy? W programowaniu obiektowym posługujemy się obiektami. Obiekty charakteryzują się: cechami (inaczej - atrybutami lub stanami) operacjami, które na nich można wykonywać

Bardziej szczegółowo

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

Programowanie obiektowe, wykład nr 6. Klasy i obiekty Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 6 Klasy i obiekty W programowaniu strukturalnym rozwój oprogramowania oparto

Bardziej szczegółowo

Dziedziczenie jednobazowe, poliformizm

Dziedziczenie jednobazowe, poliformizm Dziedziczenie jednobazowe, poliformizm 1. Dziedziczenie jednobazowe 2. Polimorfizm część pierwsza 3. Polimorfizm część druga Zofia Kruczkiewicz, ETE8305_6 1 Dziedziczenie jednobazowe, poliformizm 1. Dziedziczenie

Bardziej szczegółowo

Do czego służą klasy?

Do czego służą klasy? KLASY Dorota Pylak 2 Do czego służą klasy? W programowaniu obiektowym posługujemy się obiektami. Obiekty charakteryzują się: cechami (inaczej - atrybutami lub stanami) operacjami, które na nich można wykonywać

Bardziej szczegółowo

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np Klasy Klasa jest nowym typem danych zdefiniowanym przez użytkownika Wartości takiego typu nazywamy obiektami Najprostsza klasa jest po prostu strukturą, np struct Zespolona { Klasy jako struktury z operacjami

Bardziej szczegółowo

Programowanie, część I

Programowanie, część I 11 marca 2010 Kontakt Wstęp Informacje organizacyjne Materiał na ćwiczenia Plan wykładu http://www.fuw.edu.pl/~rwys/prog rwys@fuw.edu.pl tel. 22 55 32 263 Materiał na ćwiczenia Informacje organizacyjne

Bardziej szczegółowo

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

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Przydzielanie pamięci Poniżej przedstawiono w C++ dwie klasy obrazujące sposób rezerwacji pamięci. class Osoba char imie[30];

Bardziej szczegółowo

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne Tematyka wykładów 1. Wprowadzenie. Klasy cz. 1 - Język C++. Programowanie obiektowe - Klasy i obiekty - Budowa i deklaracja klasy. Prawa dostępu - Pola i funkcje składowe - Konstruktor i destruktor - Tworzenie

Bardziej szczegółowo

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

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;

Bardziej szczegółowo

KLASY cz.1. Dorota Pylak

KLASY cz.1. Dorota Pylak KLASY cz.1 Dorota Pylak Do czego służą klasy? 2 W programowaniu obiektowym posługujemy się obiektami. Obiekty charakteryzują się: cechami (inaczej - atrybutami lub stanami) operacjami, które na nich można

Bardziej szczegółowo

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut. Dziedziczenie Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasy Student oraz Pracownik: class Student class Pracownik

Bardziej szczegółowo

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java - tablice, konstruktory, dziedziczenie i hermetyzacja Java - tablice, konstruktory, dziedziczenie i hermetyzacja Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU zmienne tablicowe konstruktory klas dziedziczenie hermetyzacja

Bardziej szczegółowo

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

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Pojęcie struktury i klasy. Konstruktor i destruktor. Spotkanie 08 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Spotkanie 08 Klasy: definicja a deklaracja klasy dane składowe

Bardziej szczegółowo

Wstęp do Programowania 2

Wstęp do Programowania 2 Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 5 W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu:

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie;

Bardziej szczegółowo

Programowanie komputerowe. Zajęcia 7

Programowanie komputerowe. Zajęcia 7 Programowanie komputerowe Zajęcia 7 Klasy Klasy to typy danych, które pozwalają na zgromadzenie w jednej zmiennej (obiekcie) zarówno danych jak i operacji związanych z tymi danymi. Obiekt danej klasy może

Bardziej szczegółowo

Język C++ umożliwia przeciążanie operatora, tzn. zmianę jego znaczenia na potrzeby danej klasy. W tym celu definiujemy funkcję o nazwie:

Język C++ umożliwia przeciążanie operatora, tzn. zmianę jego znaczenia na potrzeby danej klasy. W tym celu definiujemy funkcję o nazwie: Rozdział 10 Przeciążanie operatorów 10.1 Definicje Język C++ umożliwia przeciążanie operatora, tzn. zmianę jego znaczenia na potrzeby danej klasy. W tym celu definiujemy funkcję o nazwie: operator op gdzie

Bardziej szczegółowo

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

Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h Programowanie II Lista 3 Modyfikatory dostępu plik TKLientBanku.h plik z funkcją main Przyjaźń Dziedziczenie Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące. Jest to

Bardziej szczegółowo

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 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26 Programowanie w C++ Wykład 13 Katarzyna Grzelak 4 czerwca 2018 K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe

Bardziej szczegółowo

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

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium: Zakres laboratorium: definiowanie struktur terminologia obiektowa definiowanie klas funkcje składowe klas programy złożone z wielu plików zadania laboratoryjne Laboratorium nr 12 Temat: Struktury, klasy.

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4 PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej

Bardziej szczegółowo

Podstawy programowania w języku C++ Zadania

Podstawy programowania w języku C++ Zadania Podstawy programowania w języku C++ Zadania Mirosław Głowacki 1,2 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra Informatyki

Bardziej szczegółowo

Szablony klas, zastosowanie szablonów w programach

Szablony klas, zastosowanie szablonów w programach Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do

Bardziej szczegółowo

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 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30 Programowanie w C++ Wykład 11 Katarzyna Grzelak 13 maja 2019 K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30 Klasy cd K.Grzelak (Wykład 11) Programowanie w C++ 2 / 30 Klasy - powtórzenie Klasy typy definiowane

Bardziej szczegółowo

Programowanie Obiektowo Zorientowane w języku c++ Konstruktory

Programowanie Obiektowo Zorientowane w języku c++ Konstruktory Programowanie Obiektowo Zorientowane w języku c++ Konstruktory Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra

Bardziej szczegółowo

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 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27 Programowanie w C++ Wykład 12 Katarzyna Grzelak 28 maja 2018 K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27 Klasy cd K.Grzelak (Wykład 12) Programowanie w C++ 2 / 27 Klasy - powtórzenie Klasy typy definiowane

Bardziej szczegółowo

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 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27 Programowanie w C++ Wykład 14 Katarzyna Grzelak 3 czerwca 2019 K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27 Na ostatnim wykładzie: Konstruktor standardowy (domyślny) to taki, który nie ma żadnych argumentów

Bardziej szczegółowo

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego Iwona Kochaoska Programowanie Obiektowe Programowanie obiektowe (ang. object-oriented programming) - metodyka tworzenia programów komputerowych,

Bardziej szczegółowo

Programowanie obiektowe w C++ Wykład 12

Programowanie obiektowe w C++ Wykład 12 Programowanie obiektowe w C++ Wykład 12 dr Lidia Stępień Akademia im. Jana Długosza w Częstochowie L. Stępień (AJD) 1 / 22 Zakresowe pętle for double tab[5] {1.12,2.23,3.33,4.12,5.22 for(double x: tab)

Bardziej szczegółowo

Materiały do zajęć VII

Materiały do zajęć VII Spis treści I. Klasy Materiały do zajęć VII II. III. Konstruktor Właściwości i indeksatory Klasy Programowanie obiektowe wiadomości wstępne Paradygmat programowania obiektowego Abstrakcja Hermetyzacja

Bardziej szczegółowo

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

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc Rok akademicki 2016/2017, Wykład nr 4 2/45 Plan wykładu nr 4 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2016/2017

Bardziej szczegółowo

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

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów. PROGRAMOWANIE OBIEKTOWE W C++ cz. 2 Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów. Dziedziczenie Dziedziczenie jest to technika pozwalaj c na definiowanie nowej klasy przy wykorzystaniu

Bardziej szczegółowo

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Inicjalizacja agregatowa zmiennej tablicowej int a[5] = 1,2,3,4,5 INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Struktury są również agregatami, dlatego: struct X double f; char c; X x1 = 1, 2.2, 'c' Ale

Bardziej szczegółowo

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

Zaawansowane programowanie w języku C++ Klasy w C++ Zaawansowane programowanie w języku C++ Klasy w C++ Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń

Bardziej szczegółowo

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

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

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

Język C++ Różnice między C a C++ Język C++ Różnice między C a C++ Plan wykładu C a C++ Różnice ogólne Typy Deklaracje zmiennych C++ jako rozszerzenie C Domyślne argumenty funkcji Przeciążanie funkcji Referencje Dynamiczny przydział pamięci

Bardziej szczegółowo

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

Operator przypisania. Jest czym innym niż konstruktor kopiujący! Operator przypisania Jest czym innym niż konstruktor kopiujący! Domyślnie jest zdefiniowany jako przypisanie składowa po składowej (zatem niekoniecznie bajt po bajcie). Dla klasy X definiuje się jako X&

Bardziej szczegółowo

Nowe słowa kluczowe. Komentarze. Wskaźniki typu void. class, delete, new, friend,... /* Komentarz w C i C++ */ // Komentarz w C++ (do końca wiersza)

Nowe słowa kluczowe. Komentarze. Wskaźniki typu void. class, delete, new, friend,... /* Komentarz w C i C++ */ // Komentarz w C++ (do końca wiersza) Różnice między C i C++ (Rozszerzenia C++) Nowe słowa kluczowe class, delete, new, friend,... Komentarze /* Komentarz w C i C++ */ // Komentarz w C++ (do końca wiersza) Wskaźniki typu void W C wskaźniki

Bardziej szczegółowo

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona

Bardziej szczegółowo

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri); Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod

Bardziej szczegółowo

Definiowanie własnych klas

Definiowanie własnych klas Programowanie obiektowe Definiowanie własnych klas Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Definiowanie własnych klas Autor:

Bardziej szczegółowo

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 12. Katarzyna Grzelak. 20 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32 Programowanie w C++ Wykład 12 Katarzyna Grzelak 20 maja 2019 K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe

Bardziej szczegółowo

Wstęp do programowania obiektowego. Wykład 2

Wstęp do programowania obiektowego. Wykład 2 Wstęp do programowania obiektowego Wykład 2 1 CECHY I KONCEPCJA PROGRAMOWANIA OBIEKTOWEGO 2 Cechy programowania obiektowego Dla wielu problemów podejście obiektowe jest zgodne z rzeczywistością (łatwe

Bardziej szczegółowo

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

Programowanie 2. Język C++. Wykład 3. 3.1 Programowanie zorientowane obiektowo... 1 3.2 Unie... 2 3.3 Struktury... 3 3.4 Klasy... 4 3.5 Elementy klasy... 5 3.6 Dostęp do elementów klasy... 7 3.7 Wskaźnik this... 10 3.1 Programowanie zorientowane

Bardziej szczegółowo

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi 1. Napisz wskaźnik do funkcji fun tak zdeklarowanej: T* fun( int, double const& ) const; definicja wskaźnika musi być precyzyjna, inaczej

Bardziej szczegółowo

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d. Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 7 Przegląd typów strukturalnych - klasy i obiekty - c.d. Klasa - powtórzenie

Bardziej szczegółowo

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY Różne właściwości Funkcje tak samo jak zmienne mają swoje miejsce w pamięci, gdzie są zapisane. Można więc uzyskać ich adres. Podobnie jak adres tablicy jest zwracany przez jej nazwę, podaną bez nawiasu

Bardziej szczegółowo

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

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE. C++ - DZIEDZICZENIE Do najważniejszych cech języka C++ należy możliwość wielokrotnego wykorzystywania kodu Prymitywnym, ale skutecznym sposobem jest kompozycja: deklarowanie obiektów wewnątrz innych klas,

Bardziej szczegółowo

Programowanie strukturalne i obiektowe. Funkcje

Programowanie strukturalne i obiektowe. Funkcje Funkcje Często w programach spotykamy się z sytuacją, kiedy chcemy wykonać określoną czynność kilka razy np. dodać dwie liczby w trzech miejscach w programie. Oczywiście moglibyśmy to zrobić pisząc trzy

Bardziej szczegółowo

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory. Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory. Konstruktory Konstruktory w językach obiektowych są to specjalne metody wywoływane podczas tworzenia nowego obiektu i służące do

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego. Spotkanie 07 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Pojęcie funkcji operatorowej Definicja funkcji operatorowej w klasie Definicja funkcji operatorowej poza klasą

Bardziej szczegółowo

Szablony funkcji i klas (templates)

Szablony funkcji i klas (templates) Instrukcja laboratoryjna nr 3 Programowanie w języku C 2 (C++ poziom zaawansowany) Szablony funkcji i klas (templates) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp

Bardziej szczegółowo

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

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec PROE wykład 3 klasa string, przeciążanie funkcji, operatory dr inż. Jacek Naruniec Przypomnienie z ostatnich wykładów Konstruktory/destruktory i kolejność ich wywołania w złożonej klasie. Referencja Obiekty

Bardziej szczegółowo

Wyliczanie wyrażenia obiekty tymczasowe

Wyliczanie wyrażenia obiekty tymczasowe Wyliczanie wyrażenia obiekty tymczasowe Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2013 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu

Bardziej szczegółowo

Języki i metody programowania Java. Wykład 2 (część 2)

Języki i metody programowania Java. Wykład 2 (część 2) Języki i metody programowania Java INF302W Wykład 2 (część 2) Autor Dr inż. Zofia Kruczkiewicz 1 Struktura wykładu 1. Identyfikacja danych reprezentowanych przez klasy podczas opracowania koncepcji prostego

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Wykład 2 28 lutego 2019 Plan wykładu 1 2 3 4 5 Plan wykładu 1 2 3 4 5 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie; standardy ISO i ECMA; podobny składniowo do C++; Język C Krótka

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Zaawansowane programowanie w języku C++ Programowanie obiektowe Zaawansowane programowanie w języku C++ Programowanie obiektowe Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka

Bardziej szczegółowo

Programowanie obiektowe - 1.

Programowanie obiektowe - 1. Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która

Bardziej szczegółowo

Zmienne, stałe i operatory

Zmienne, stałe i operatory Zmienne, stałe i operatory Przemysław Gawroński D-10, p. 234 Wykład 2 4 marca 2019 (Wykład 2) Zmienne, stałe i operatory 4 marca 2019 1 / 21 Outline 1 Zmienne 2 Stałe 3 Operatory (Wykład 2) Zmienne, stałe

Bardziej szczegółowo

Programowanie Obiektowe i C++

Programowanie Obiektowe i C++ Programowanie Obiektowe i C++ Marcin Benke Instytut Informatyki UW 6.11.2006 Marcin Benke (IIUW) Programowanie Obiektowe i C++ 6.11.2006 1 / 138 Operator przypisania Jest czym innym niż konstruktor kopiujacy!

Bardziej szczegółowo

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

Składnia C++ Programowanie Obiektowe Mateusz Cicheński 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

Bardziej szczegółowo

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Instytut Mechaniki i Inżynierii Obliczeniowej  Wydział Mechaniczny Technologiczny Politechnika Śląska Instytut Mechaniki i Inżynierii Obliczeniowej www.imio.polsl.pl fb.com/imiopolsl @imiopolsl Wydział Mechaniczny Technologiczny Politechnika Śląska Języki programowania z programowaniem obiektowym Laboratorium

Bardziej szczegółowo

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

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006) Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006) Część 1. Teoria Wyjaśnij pojęcia, podaj przykład: klasa obiekt konstruktor destruktor kapsułkowanie (hermetyzacja) wskaźnik this

Bardziej szczegółowo

Definicje klas i obiektów. Tomasz Borzyszkowski

Definicje klas i obiektów. Tomasz Borzyszkowski Definicje klas i obiektów Tomasz Borzyszkowski Podstawy Do tej pory używaliśmy klas jedynie po to, by zdefiniować metodę main(). Klasy mają znacznie szersze zastosowanie w Java. W OOP (także w Java) klasy

Bardziej szczegółowo

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji Politechnika Białostocka Wydział Elektryczny Katedra Telekomunikacji i Aparatury Elektronicznej Instrukcja do pracowni specjalistycznej z przedmiotu Obiektowe programowanie aplikacji Kod przedmiotu: TS1C410201

Bardziej szczegółowo

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

Pola i metody statyczne. Klasy zawierające pola i metody statyczne Instrukcja laboratoryjna nr 1 Programowanie w języku C 2 (C++ poziom zaawansowany) Pola i metody statyczne. Klasy zawierające pola i metody statyczne dr inż. Kaczmarek Tomasz mgr inż. Lasota Maciej dr

Bardziej szczegółowo

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje Funkcje (podprogramy) Mianem funkcji określa się fragment kodu, który może być wykonywany wielokrotnie z różnych miejsc programu. Ogólny zapis: typ nazwa(argumenty) ciało funkcji typ określa typ danych

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { Przeciążanie a dziedziczenie class Integer2: public Integer Operatory, z wyjątkiem operatora przypisania są automatycznie dziedziczone w klasach pochodnych. Integer2(int i): Integer(i) Automatyczne tworzenie

Bardziej szczegółowo

Mechanizm dziedziczenia

Mechanizm dziedziczenia Mechanizm dziedziczenia Programowanie obiektowe jako realizacja koncepcji ponownego wykorzystania kodu Jak przebiega proces dziedziczenia? Weryfikacja formalna poprawności dziedziczenia Realizacja dziedziczenia

Bardziej szczegółowo

> C++ dziedziczenie. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

> C++ dziedziczenie. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki > C++ dziedziczenie Dane: Iwona Polak iwona.polak@us.edu.pl Uniwersytet Śląski Instytut Informatyki 1432108800 > Dziedziczenie Dziedziczenie C++ dziedziczenie 2 / 13 > Dziedziczenie Dziedziczenie * to

Bardziej szczegółowo

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki Informatyka I Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2017 Dziedziczenie klas

Bardziej szczegółowo

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod

Bardziej szczegółowo

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy PRAWA PRZYJACIÓŁ KLASY. Dostęp z zewnątrz: Dostęp z wewnątrz:

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy PRAWA PRZYJACIÓŁ KLASY. Dostęp z zewnątrz: Dostęp z wewnątrz: Prawa dostępu do składowych klasy PRAWA PRZYJACIÓŁ KLASY 91 Dostęp z zewnątrz: double limit; ; water_temp T; T.limit = 100; Dostęp z wewnątrz: double set_temp(double nt) { if (nt0) ; water_temp

Bardziej szczegółowo

dr inż. Jarosław Forenc

dr inż. Jarosław Forenc Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013 Wykład nr 6 (07.12.2012) dr inż. Jarosław Forenc Rok

Bardziej szczegółowo