Wprowadzenie do programowanie obiektowego w języku C++

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

Download "Wprowadzenie do programowanie obiektowego w języku C++"

Transkrypt

1 Wprowadzenie do programowanie obiektowego w języku C++ Część druga Obiekty i klasy Autor Roman Simiński Kontakt roman.siminski@us.edu.pl Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim uczestnictwa. Opracowanie to jest chronione prawem autorskim. Wykorzystywanie jakiegokolwiek fragmentu w celach innych niż nauka własna jest nielegalne. Dystrybuowanie tego opracowania lub jakiejkolwiek jego części oraz wykorzystywanie zarobkowe bez zgody autora jest zabronione.

2 Obiekty i klasy w języku C++ Problem Obiekty i klasy Przewidywane jest napisanie obiektowej wersji programu, realizującego obliczenia z wykorzystaniem pól różnych, płaskich figur geometrycznych. Należy zdefiniować klasy opisujące takie figury. Koło Prostokąt Kwadrat Trójkąt Copyright Roman Simiński Strona : 2

3 Obiekty i klasy w języku C++ Analiza obiektowa Obiekty i klasy Stosując zasadę abstrakcji wyodrębniamy najistotniejsze cechy obiektów dla rozpatrywanego zagadnienia obliczeń pól figur płaskich.? Koło Prostokąt Kwadrat Trójkąt Copyright Roman Simiński Strona : 3

4 Obiekty i klasy w języku C++ Obiekty i klasy Analiza obiektowa klasa opisu kwadratu Square Square Kwadrat? side Modelowany obiekt Model implementacyjny side Model analityczny Copyright Roman Simiński Strona : 4

5 Obiekty i klasy w języku C++ Obiekty i klasy Hermetyzacja a pola publiczne i prywatne Stosując zasadę hermetyzacji ukrywamy dane w części prywatnej i zapewniamy dostęp poprzez metody dostępowe (interfejsowe). Pola publiczne a pola prywatne s.side = 100; cout << s.side; s.setside( 100 ); cout << s.getside(); // Brak hermetyzacji, bezpośredni dostęp do pól // Brak hermetyzacji, bezpośredni dostęp do pól // Hermetyzacja, dostęp do pola za pomoc ą modyfikatora // Hermetyzacja, dostęp do pola za pomoc ą akcesora Funkcje publiczne klasy można nieformalnie podzielić na; akcesory funkcje umożliwiające pobieranie wartości pól, akcesorem jest np. metoda getside. modyfikatory funkcje dokonujące modyfikacji wartości pól, modyfikatorem jest np. metoda setside. realizatory funkcje realizujące właściwe dla danej klasy usługi, realizatorem jest np. metoda area. Copyright Roman Simiński Strona : 5

6 Obiekty i klasy w języku C++ Stosowanie pól publicznych Obiekty i klasy Square +setside( double newside ) +getside() +area() -side: double Copyright Roman Simiński Strona : 6

7 Obiekty i klasy w języku C++ Obiekty i klasy Obiekt klasy Square od strony programisty-użytkownika Deklaracja obiektu s klasy Square: Square s; Ustalenie boku o długości 100 s.setside( 100 ); Obliczenie pola kwadratu: double p; p = s.area(); Obliczenie i wyprowadzenie pola kwadratu do stdout: cout << "Pole kwadratu wynosi: " << s.area(); Pobranie aktualnej długości boku: cout << "Bok kwadratu: " << s.getside(); Copyright Roman Simiński Strona : 7

8 Obiekty i klasy w języku C++ Obiekty i klasy Szkic programu obliczającego pole kwadratu #include <iostream> using namespace std; //??? int main() double num; Square s; cout << endl << "Obliczam pole kwadratu" << endl; cout << "Podaj bok: "; cin >> num; s.setside( num ); cout << "Pole kwadratu wynosi: " << s.area(); return EXIT_SUCCESS; Copyright Roman Simiński Strona : 8

9 Obiekty i klasy w języku C++ Deklaracja klasy Square Obiekty i klasy class Square public : // Składowe publiczne void setside( double newside ); double getside(); double area(); private: ; // Składowe prywatne double side; Copyright Roman Simiński Strona : 9

10 Obiekty i klasy w języku C++ Obiekty i klasy Sekcje private i public Dwie podstawowe sekcje: private elementy zadeklarowane w tej sekcji mogą być wykorzystywane wyłącznie przez funkcje składowe danej klasy. Elementami tymi mogą być zarówno pola i funkcje. Mówi się o nich, że są prywatne. public elementy zadeklarowane w tej sekcji są dostępne również dla innych elementów programu. Mówi się o nich, że są publiczne lub stanowią interfejs klasy. Dwie metody kolejności zapisu sekcji public i private class C public: // Część publiczna klasy void interfacemethod(); class C private: // Część prywatna klasy void privatemethod(); ; private: // Część prywatna klasy void privatemethod(); int internaldata; int internaldata; public: // Część publiczna klasy void interfacemethod(); ; Copyright Roman Simiński Strona : 10

11 Obiekty i klasy w języku C++ Definicja funkcji składowych Obiekty i klasy class Square public : void setside( double newside ); double getside(); double area(); private: double side; ; void Square::setSide( double newside ) side = newside; W języku C++ występuje operator zakresu ::. Służy np. do deklarowania funkcji składowych poza ciałem klasy. Jego zastosowanie jest szersze, zapis Square:: oznacza, że występujący po nim element należy do klasy Square. double Square::getSide() return side; double Square::area() return side * side; Funkcje składowe poza deklaracja klasy Copyright Roman Simiński Strona : 11

12 Obiekty i klasy w języku C++ Definicja funkcji składowych Obiekty i klasy class Square public : void setside( double newside ) side = newside; double getside() return side; double area() return side * side; private: double side; ; Funkcje składowe w obrębie klasy Copyright Roman Simiński Strona : 12

13 Konstruktory Obiekty i klasy Co się stanie gdy nie ustalimy rozmiaru boku obiektu klasy Square? Square s; Square squares[ 3 ]; cout << s.area() << endl; cout << squares[ 0 ].area() << endl; cout << squares[ 1 ].area() << endl; cout << squares[ 2 ].area() << endl;???? Jak zainicjować obiekt na etapie jego definiowania? Konstruktor jest specjalną funkcją, aktywowaną przez kompilator automatycznie w momencie gdy obiekt jest tworzony. Dzieje się tak zanim programista będzie mógł dorwać obiekt. Konstruktor ma przygotować obiekt do życia. Konstruktor to specyficzna funkcja. Konstruktor nie ma typu rezultatu, nosi taką nazwę jak nazwa klasy i zwykle nie wywołuje się go jawnie w kodzie programu. Copyright Roman Simiński Strona : 13

14 Konstruktory Rodzaje konstruktorów Obiekty i klasy Występują cztery rodzaje konstruktorów: Konstruktor domyślny (ang. default constructor) aktywowany, gdy tworzony jest obiekt bez jawnie określonych danych inicjalizujących. Square s, squares[10]; Konstruktor ogólny (ang. general constructor), zwany też parametrowym, aktywowany gdy tworzymy obiekt z jawnie określonymi danymi inicjalizującymi. Square s( 100 ); Konstruktor kopiujący (ang. copy constructor) aktywowany wtedy, gdy tworzymy obiekt, inicjalizując go danymi z innego obiektu tej samej klasy. Square s( 100 ); Square a = s, b( s ); Konstruktor rzutujący (ang. cast constructor) aktywowany wtedy, gdy tworzymy obiekt, inicjalizując go danymi z obiektu innej klasy. Square s( 100 ); Rectangle c = s, d( s ); Copyright Roman Simiński Strona : 14

15 Konstruktor domyślny default constructor Obiekty i klasy Wprowadzamy konstruktor domyślny klasy Square class Square public : Square(); // Konstruktor domyślny (bezparametrowy) void setside( double newside ); double getside(); double area(); private: double side; ; Okoliczności aktywowania konstruktora domyślnego Square a; Square b; Square c; Square squares[ 3 ]; // Aktywacja: a.square() // Aktywacja: b.square() // Aktywacja: c.square() // Aktywacja: Square() dla ka dego elementu tablicy: ż // squares[ 0 ].Square() // squares[ 1 ].Square() // squares[ 2 ].Square() Copyright Roman Simiński Strona : 15

16 Konstruktor domyślny default constructor Dwie wersje realizacji konstruktora domyślnego: Wersja intuicyjna Square::Square() side = 0; Wersja z listą inicjalizacyjną Square::Square() : side( 0 ) Obiekty i klasy Nazwa pola Square::Square() : side( 0 ) Lista inicjalizująca konstruktora Wyrażenie inicjalizujące Lista inicjalizacyjna ma dwa zastosowania. Pierwsze z nich to inicjowanie pól obiektu. Na liście może wystąpić nazwa pola, a w nawiasach wartość temu polu przypisywana. Drugie zastosowanie listy inicjalizacyjnej zostanie omówione później. Copyright Roman Simiński Strona : 16

17 Konstruktor parametrowy, inaczej ogólny general constructor Obiekty i klasy Czy można zainicjować obiekt na etapie deklaracji? Square s( 100 ); cout << "Pole kwadratu wynosi: " << s.area(); Okoliczności aktywowania konstruktora ogólnego Konstruktor ogólny pozwala na zainicjowanie pól obiektu na etapie jego deklaracji, wartościami określonymi przez programistę. Square a( 1 ); // Aktywacja: a.square( 1 ) Square b( 5 ); // Aktywacja: b.square( 5 ) Copyright Roman Simiński Strona : 17

18 Konstruktor parametrowy, inaczej ogólny general constructor Obiekty i klasy Wprowadzamy konstruktor parametrowy (ogólny) klasy Square class Square public : Square(); Square( double startside ); void setside( double newside ); double getside(); double area(); private: double side; ; Copyright Roman Simiński Strona : 18

19 Konstruktor parametrowy, inaczej ogólny general constructor Obiekty i klasy Dwie wersje realizacji konstruktora: Wersja intuicyjna Square::Square( double startside ) side = startside; Wersja z listą inicjalizacyjną Square::Square( double startside ) : side( startside ) Copyright Roman Simiński Strona : 19

20 Konstruktor parametrowy, inaczej ogólny general constructor Obiekty i klasy Jak zainicjować obiekt const? Słowo kluczowe const oznacza, że wartość zmiennej bądź argumentu nie może być zmieniana w czasie wykonania programu. const Square cs; cs.setside( 1.2 ); // Niezainicjowany obiekt const // Błąd próba modyfikacji obiektu const cout << "Pole kwadratu wynosi: " << cs.area(); Konstruktor ogólny pozwala na zainicjowanie obiektów const const Square cs( 1.2 ); // Zainicjowany obiekt const cout << "Pole kwadratu wynosi: " << cs.area(); Copyright Roman Simiński Strona : 20

21 Operator zakresu w akcji Obiekty i klasy Wykorzystanie operatora zakresu :: Czy parametr funkcji setside może nazywać się side? Czyli zamiast: void Square::setSide( double newside ) side = newside; definiujemy funkcję tak: void Square::setSide( double side ) side = side; To nie będzie działać poprawnie Parametr formalny funkcji przesłania w jej ciele pole gdy ich nazwy są jednakowe Ale można użyć operatora zakresu: void Square::setSide( double side ) Square::side = side; Copyright Roman Simiński Strona : 21

22 Operator zakresu w akcji Obiekty i klasy Wykorzystanie operatora zakresu ::,cd.... Podobny problem występuje w konstruktorze: Square::Square( double side ) side = side; Ten konstruktor nie będzie działał poprawnie Operator zakresu odsłania przysłonięte pole Square::Square( double side ) Square::side = side; Ten konstruktor będzie działał poprawnie Problem przesłaniania pól nie występuje, gdy stosujemy listę inicjalizującą Square::Square( double side ) : side( side ) Copyright Roman Simiński Strona : 22

23 Koncepcja przeciążania funkcji Obiekty i klasy Dlaczego dwa konstruktory posiadają tę samą nazwę? W języku C++ istnieje możliwość przeciążania nazw funkcji Identyfikator Square jest przeciążony i oznacza: konstruktor domyślny Square(), konstruktor ogólny Square( float side ). Przeciążać można również nazwy zwykłych funkcji int add( int a, int b ) return a + b; double add( double a, double b ) return a + b; cout << endl << "Dodawanie int :" << add( 1, 1 ) cout << endl << "Dodawanie double :" << add( 1.0, 1.0 ); Copyright Roman Simiński Strona : 23

24 Funkcje składowe const Obiekty i klasy Uzupełniamy prototypy i definicje funkcji słowem kluczowym const class Square public : Square(); Square( double startside ); Metody ze specyfikacją const nie mogą modyfikować pól obiektu, mogą zatem być wywoływane dla obiektów stałych. void setside( double newside ); double getside() const; double area() const; private: double side; ; double Square::getSide() const return side; double Square::area() const return side * side; Copyright Roman Simiński Strona : 24

25 Konstruktor kopiujący copy constructor Podstawy programowania obiektowego Dla typów wbudowanych można tak: int j = 1; int i = j; Czy można tak samo dla obiektów? Square first( 100 ); Square second = first; Konstruktor kopiujący (ang. copy constructor), odpowiedzialny za skopiowanie zawartości jednego obiektu do drugiego oba tej samej klasy na etapie inicjalizacji. Copyright Roman Simiński Strona : 25

26 Konstruktor kopiujący copy constructor Podstawy programowania obiektowego Najlepiej zdefiniować konstruktor kopiujący class Square public : Square(); Square( double side ); Square( Square & othersquare ); Operator & oznacza referencję, umieszczony w deklaracji parametru oznacza przekazanie przez zmienną. void setside( double side ); double getside() const; double area() const; private: double side; ; Copyright Roman Simiński Strona : 26

27 Konstruktor kopiujący copy constructor Podstawy programowania obiektowego Dwie wersje realizacji konstruktora: Wersja intuicyjna Square::Square( Square & othersquare ) side = othersquare.side; Wersja z listą inicjalizacyjną Square::Square( Square & othersquare ) : side( othersquare.side ) Copyright Roman Simiński Strona : 27

28 Konstruktor kopiujący copy constructor Podstawy programowania obiektowego Okoliczności aktywowania konstruktora kopiującego Square first( 100 ); // first.square( 100 ); Square second = first; // second.square( first ); Square third( first ); // third.square( first ); cout << "Pole kwadratu pierwszego wynosi: " << first.area(); cout << "Pole kwadratu drugiego wynosi : " << second.area(); cout << "Pole kwadratu trzeciego wynosi : " << third.area(); Konstruktor kopiujący odpowiedzialny za skopiowanie zawartości obiektów tej samej klasy na etapie inicjalizacji. W tej sytuacji konstruktor kopiujący nie działa! Square first( 100 ); Square second; second = first; // Tutaj nie zostaje wywołany konstruktor kopiujący Copyright Roman Simiński Strona : 28

29 Konstruktor kopiujący copy constructor Podstawy programowania obiektowego Nie można: const Square first( 1 ); Square second = first; // Błąd, niejawna referencja do obiektu const Rozwiązanie problemu z obiektem const: Square::Square( const Square & othersquare ) : side( othersquare.side ) Copyright Roman Simiński Strona : 29

30 Będzie jeszcze jeden konstruktor... Podstawy programowania obiektowego Załóżmy, że istnieje klasa opisu prostokąta Rectangle class Rectangle public : // Konstruktory Rectangle(); Rectangle( double width, double height ); Rectangle( const Rectangle & otherrectangle ); // Modyfikatory void setwidth( double width ); void setheight( double height ); // Akcesory double getwidth() const; double getheight() const; // Realizator double area() const; private: double width, height; ; Copyright Roman Simiński Strona : 30

31 Będzie jeszcze jeden konstruktor... Podstawy programowania obiektowego Definicja konstruktorów i realizatora // Konstruktor domyślny Rectangle::Rectangle() : width( 0 ), height( 0 ) // Konstruktor ogólny Rectangle::Rectangle( double width, double height ) : width( width ), height( height ) // Konstruktor kopiujący Rectangle::Rectangle( const Rectangle & otherrectangle ) : width( otherrectangle.width ), height( otherrectangle.height ) // Realizator double Rectangle::area() const return width * height; Copyright Roman Simiński Strona : 31

32 Będzie jeszcze jeden konstruktor... Podstawy programowania obiektowego Definicja modyfikatorów i realizatorów // Modyfikatory void Rectangle::setWidth( double width ) Rectangle::width = width; void Rectangle::setHeight( double height ) Rectangle::height = height; // Akcesory double Rectangle::getWidth() const return width; double Rectangle::getHeight() const return height; Copyright Roman Simiński Strona : 32

33 Konstruktor rzutujący cast constructor Podstawy programowania obiektowego Mamy klasę Square i Rectangle, czy można tak: Square s( 100 ); Rectangle r( s ); // Definicja zainicjowanego kwadratu s // Definicja prostokąta r, zainicjowanego kwadratem s Następuje tutaj inicjalizacja obiektu pewnej klasy obiektem innej klasy. Skąd kompilator ma wiedzieć, jak przepisać dane pomiędzy obiektami różnych klas? Programista może określić metodę przepisania danych z obiektu jednej klasy do obiektu klasy innej, pisząc konstruktor rzutujący. Copyright Roman Simiński Strona : 33

34 Konstruktor rzutujący cast constructor Podstawy programowania obiektowego Potrzebny jest konstruktor rzutujący Konstruktor rzutujący odpowiedzialny za skopiowanie zawartości obiektów pewnej klasy do obiektu innej klasy na etapie inicjalizacji. Rectangle::Rectangle( const Square & square ) : width( square.getside() ), height( square.getside() ) Zdefiniowany przez programistę sposób zainicjowania wysokości i szerokości prostokąta informacjami pochodzącymi z obiektu klasy opisującej kwadrat. Copyright Roman Simiński Strona : 34

35 Informacja dodatkowa parametry domyślne Podstawy programowania obiektowego Parametry domyślne: void fun( int i, float f = 0, char c = A );... fun( 10 ); // i == 10, f == 0, c == A fun( 20, 3.15 ); // i == 20, f == 3.15, c == A fun( 30, 22.1, Z ); // i == 30, f == 22.1, c == Z Parametry domyślne dotyczą funkcji składowych klas jak i funkcji niezwiązanych z klasami. Parametr domyślny to wartość określona na etapie deklaracji funkcji, która zostanie automatycznie wstawiona do parametru formalnego, jeżeli dana funkcja zostanie wywołana bez odpowiedniego parametru aktualnego. Parametry domyślne myszą być definiowane od końca listy parametrów. Prototypy a parametry domyślne Jeżeli stosujemy prototypy funkcji, wartości parametrów domyślnych określa się właśnie w prototypie, w definicji funkcji już nie występują. void fun( int i, float f = 0, char c = A );... void fun( int i, float f, char c ) Copyright Roman Simiński Strona : 35

36 Podsumowanie informacji o konstruktorach Podstawy programowania obiektowego Konstruktor domyślny default constructor A(); A( arg1 = wart1, arg2 = wart2,... ); Konstruktor domyślny: Jest bezparametrowy, lub posiada wszystkie parametry będące parametrami domyślnymi. Jednoczesne wystąpienie obu powyższych form spowoduje błąd kompilacji. Inicjuje obiekty, deklarowane lub (bądź tworzone) bez parametrów. Dotyczy to również obiektów będących elementami tablicy. A a, b, c; A tab[ 10 ]; // Aktywacja: a.a(), b.a(), c.a() // Aktywacja: A() dla każdego z 10-ciu elementów tab: // tab[ 0 ].A(), tab[ 1 ].A(), itd.... Copyright Roman Simiński Strona : 36

37 Podsumowanie informacji o konstruktorach Podstawy programowania obiektowego Konstruktor domyślny syntetyzowany przez kompilator Jeżeli dla danej klasy nie zdefiniowano żadnego konstruktora, kompilator syntetyzuje konstruktor domyślny. Jeżeli dla danej klasy zdefiniowano jakiś konstruktor inny od domyślnego, a ten jest potrzebny, lecz niezdefiniowany, kompilator zgłosi błąd. Syntetyzowany konstruktor domyślny nie robi niczego mądrego. Nie należy się np. spodziewać po nim inicjalizacji pól wartościami zerowymi. Programista powinien zdefiniować jawnie sposób inicjalizacji obiektów definiowanych bezparametrowo. Służy do tego właśnie konstruktor domyślny, jego definiowanie jest dobrą praktyką. Nie należy ufać konstruktorowi domyślnemu syntetyzowanemu przez kompilator. Copyright Roman Simiński Strona : 37

38 Podsumowanie informacji o konstruktorach Podstawy programowania obiektowego Konstruktor ogólny general constructor A( arg1, arg2,... ); Konstruktor ogólny: Jest to podstawowy konstruktor przeznaczony do inicjowania obiektów na etapie ich deklaracji czy też tworzenia. Argumenty określają zwykle wartości jakie mają być przypisane określonym polom obiektu. Konstruktorów głównych może być więcej, mogą one zawierać również parametru domyślne. Szczególnym przypadkiem jest konstruktor posiadający tylko parametry domyślne, staje się on wtedy konstruktorem domyślnym. A( int a, float b, char * c = NULL ); A obj1( 2, 3.4, "Ala"); A obj2( 1, 0.0 ); A obj3( 5, 5.5, "Pięć"); Copyright Roman Simiński Strona : 38

39 Podsumowanie informacji o konstruktorach Podstawy programowania obiektowego Wiele konstruktorów ogólnych Rectangle::Rectangle( float width, float height ) : width( width ), height( height ) Rectangle::Rectangle( float side ) : width( side ), height( side )... Rectangle r1( 10, 30), r2( 20 ); Copyright Roman Simiński Strona : 39

40 Podsumowanie informacji o konstruktorach Podstawy programowania obiektowego Konstruktor kopiujący copy constructor A( A & obj ); A( A & obj, arg1 = wart1,... ); A( const A & obj ); A( const A & obj, arg1 = wart1,... ); Konstruktor kopiujący: Jest potrzebny jedynie wtedy, gdy przewidziana jest inicjalizacja obiektu danej klasy innym obiektem tejże klasy: A obj1; A obj2 = obj1; A obj3( obj2 ); void fun( A obj ); A obj1; fun( obj1 ); A fun( void )... Copyright Roman Simiński Strona : 40

41 Podsumowanie informacji o konstruktorach Podstawy programowania obiektowego Konstruktor kopiujący a bitowe kopiowanie pole po polu Kompilator potrafi sobie poradzić z takim przypadkiem. Wykona kopiowanie zawartości obiektu obj1 do obiektów obj2 i obj3 pole po polu, wykonując ich bitową kopię. W niektórych przypadkach bitowe kopiowanie pole po polu jest wystarczające. Wtedy programista nie musi definiować konstruktora kopiującego. Tak na prawdę, w klasach Square i Rectangle konstruktor ten nie jest potrzebny. Rectangle r1( 10, 20 ); Rectangle r2( r1 ); r1 r2 width 10 width 10 height 20 height 20 Copyright Roman Simiński Strona : 41

42 Podsumowanie informacji o konstruktorach Podstawy programowania obiektowego Konstruktor kopiujący a bitowe kopiowanie pole po polu Samochod volvos80( "Volvo", "S80" ); Samochod volvov50( volvos80 ); volvov50.zmienmodel( "V50" ); volvos80 marka model Volvo S80 V50 volvov50 marka model volvov50.zmienmodel( "V50" ); Copyright Roman Simiński Strona : 42

43 Podsumowanie informacji o konstruktorach Podstawy programowania obiektowego Konstruktor kopiujący a bitowe kopiowanie pole po polu Konstruktor kopiujący używać, nie używać? Stosowanie konstruktora kopiującego jest dobrą, programistyczną praktyką. Dzięki jawnie zdefiniowanym konstruktorom programista ma kontrolę nad kopiowaniem wartości, występujących w wielu, czasem zaskakujących sytuacjach. Można zablokować możliwość inicjowania obiektów, wartością innego obiektu tej samej klasy: class A public: A() : i( 0 ) private : A( const A & ); ; int i; A a1; A a2( a1 ); // A::A(const A &) is not accessible Copyright Roman Simiński Strona : 43

44 Podsumowanie informacji o konstruktorach Podstawy programowania obiektowego Konstruktor rzutujący cast, type conversion constructor A( B & obj ); A( const B & obj ); Konstruktor rzutujący: Posiada jeden parametr będący referencją obiektu innej klasy. Innych argumentów może nie być lub powinny być one argumentami domyślnymi. Jest stosowany wszędzie tam, gdzie należy zainicjować obiekt pewnej klasy wartością obiektu innej klasy. Programista może dzięki konstruktorowi rzutującemu określić w jaki sposób informacje zapisane w obiekcie klasy B mają zostać odwzorowane (przepisane) w obiekcie klasy A. Copyright Roman Simiński Strona : 44

45 Funkcje inline Klasa Rectangle raz jeszcze Podstawy programowania obiektowego class Rectangle public : void setwidth( float width ) Rectangle::width = width; ; float getwidth() const return width;... Funkcje zdefiniowane wewnątrz definicji klasy są traktowane niejawnie jako funkcje inline (rozwijane w miejscu wywołania). Funkcje inline nie są wywoływane w sposób klasyczny ich kod jest umieszczany w miejscu wywołania i w rzeczywistości nie są one wywoływane. Funkcje inline są preferowanym w C++ zamiennikiem makr definiowanych z wykorzystaniem #define. Copyright Roman Simiński Strona : 45

46 Funkcje inline Podstawy programowania obiektowego Jak zadeklarować funkcje jako inline poza zasięgiem deklaracji klasy? class Rectangle public : ;... void setwidth( float width ); float getwidth() const;... inline void Rectangle::setWidth( float width ) Rectangle::width = width; inline float Rectangle::getWidth() const return width; Copyright Roman Simiński Strona : 46

47 Funkcje inline Uwagi na temat funkcji inline Podstawy programowania obiektowego Jeżeli funkcje inline mają być wykorzystywane modułach umożliwiających kompilacje rozłączną, definicja funkcji powinna wystąpić w miejscu jej zwyczajowej deklaracji w odpowiednim pliku nagłówkowym. Specyfikacja ze słowem kluczowym inline to tylko rekomendacja dla kompilatora niektórych funkcji nie można w pełni rozwinąć i będą one wywoływane klasycznie (np. rekurencyjne). W porównaniu z makrami funkcje inline zapewniają kontrolę typów i wychwytywanie błędów na etapie kompilacji. Copyright Roman Simiński Strona : 47

48 Funkcje inline Podstawy programowania obiektowego Kod wielokrotnie wykorzystujący pewną funkcję inline: Może działać szybciej brak narzutu czasowego związanego z organizacją wywołania funkcji i powrotu z podprogramu; Będzie dłuższy, zawiera bowiem rozwinięcia ciała funkcji w miejscu jej każdorazowego wywołania. Mechanizm funkcji zadeklarowanych jako inline przeznaczony jest do optymalizacji małych, prostych i często wykorzystywanych funkcji. Dobrym zastosowaniem funkcji inline jest implementacja akcesorów i modyfikatorów realizujących dostęp do prywatnych pól klasy. Copyright Roman Simiński Strona : 48

class Student Deklaracja klasy Osoba: Deklaracja klasy Student:

class Student Deklaracja klasy Osoba: Deklaracja klasy Student: Osoba Student Będziemy mieli 2 klasy: Osoba, dla której zapamiętamy dane takie jak: imie, nazwisko i wiek Oraz klasę Student, w której będziemy też dodatkowo pamiętać kierunek studiów. Deklaracja klasy

Bardziej szczegółowo

Programowanie obiektowe w języku C++

Programowanie obiektowe w języku C++ Programowanie obiektowe w języku C++ Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Klasy i obiekty pierwsze kroki Problem Przewidywane jest napisanie obiektowej wersji programu, realizującego

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi

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 Przeciążanie operatorów Słowo

Bardziej szczegółowo

1 Definiowanie prostych klas

1 Definiowanie prostych klas Ćwiczenie 1 1 Definiowanie prostych klas Ćwiczenie to poświęcone jest poznaniu podstawowych zagadnień związanych z definiowaniem prostych klas. Obejmuje m.in. ćwiczenia pozwalające opanować definiowanie

Bardziej szczegółowo

Wprowadzenie do programowanie obiektowego w języku C++

Wprowadzenie do programowanie obiektowego w języku C++ Wprowadzenie do programowanie obiektowego w języku C++ Część czwarta Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura

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

Wprowadzenie do obiektowości

Wprowadzenie do obiektowości Wprowadzenie do obiektowości Obiekt jest abstrakcją pewnego konkretnego bytu ze świata rzeczywistego, reprezentujący rzecz (obiekt fizyczny), pojęcie (obiekt konceptualny) lub pewny byt programistyczny

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ Programowanie w języku C++ Część dziewiąta Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi

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

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

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

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część ósma Zmienne wskaźnikowe koncepcja, podstawowe zastosowania Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski

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

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

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

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

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część siódma Przetwarzanie tablic znaków Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu,

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziewiąta Tablice a zmienne wskaźnikowe Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie

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

Wprowadzenie do obiektowości

Wprowadzenie do obiektowości Wprowadzenie do obiektowości Obiekt jest abstrakcją pewnego konkretnego bytu ze świata rzeczywistego, reprezentujący rzecz (obiekt fizyczny), pojęcie (obiekt konceptualny) lub pewny byt programistyczny

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

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

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

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

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

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

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

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

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

Wstęp do programowania

Wstęp do programowania wykład 8 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Podprogramy Czasami wygodnie jest wyodrębnić jakiś fragment programu jako pewną odrębną całość umożliwiają to podprogramy.

Bardziej szczegółowo

Język C++ zajęcia nr 2

Język C++ zajęcia nr 2 Język C++ zajęcia nr 2 Inicjalizacja Definiowanie obiektu może być połączone z nadaniem mu wartości początkowej za pomocą inicjalizatora, który umieszczany jest po deklaratorze obiektu. W języku C++ inicjalizator

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

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

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

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

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

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziesiąta Rekordy w C/C++ struktury Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze opracowanie zawiera skrót

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

Wprowadzenie do programowania w języku C

Wprowadzenie do programowania w języku C Wprowadzenie do programowania w języku C Część trzecia Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów

Bardziej szczegółowo

Przekazywanie argumentów wskaźniki

Przekazywanie argumentów wskaźniki Przekazywanie argumentów wskaźniki klasyczne wywołanie wyliczenie i zwrotne przekazanie tylko jednej wielkości moŝliwość uŝycia zmiennych globalnych niebezpieczeństwa z tym związane wyjście wywołanie funkcji

Bardziej szczegółowo

Języki i techniki programowania Ćwiczenia 2

Języki i techniki programowania Ćwiczenia 2 Języki i techniki programowania Ćwiczenia 2 Autor: Marcin Orchel Spis treści: Język C++... 5 Przekazywanie parametrów do funkcji... 5 Przekazywanie parametrów w Javie.... 5 Przekazywanie parametrów w c++...

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

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

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

1 Dziedziczenie. 1.1 Koncepcja dziedziczenia. Ćwiczenie 3

1 Dziedziczenie. 1.1 Koncepcja dziedziczenia. Ćwiczenie 3 Ćwiczenie 3 1 Dziedziczenie Ćwiczenie to poświęcone jest poznaniu podstawowych zagadnień związanych dziedziczeniem procesem budowania nowych klas, w oparciu o klasy istniejące. Obejmuje m.in. ćwiczenia

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

Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne

Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne Przeciążenie funkcji polega na użyciu funkcji z tą samą nazwą, które mają różne listy argumentów(różne typy, różna ilość lub to i inne).

Bardziej szczegółowo

Podstawy programowania

Podstawy programowania Podstawy programowania Część siódma Przetwarzanie tablic znaków Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze opracowanie zawiera skrót treści wykładu,

Bardziej szczegółowo

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

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych

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

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50. Programowanie (język C++) referencje Wykład 2. Referencje (1) Referencja (odnośnik) jest zmienną identyfikującą inną zmienną. Wykonanie operacji na referencji ma taki sam skutek, jak wykonanie tejŝe operacji

Bardziej szczegółowo

Wprowadzenie do programowanie obiektowego w języku C++

Wprowadzenie do programowanie obiektowego w języku C++ Wprowadzenie do programowanie obiektowego w języku C++ Część trzecia Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura

Bardziej szczegółowo

Szablony funkcji i szablony klas

Szablony funkcji i szablony klas Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument

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

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

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

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów Funkcje. Spotkanie 5 Dr inż. Dariusz JĘDRZEJCZYK Tworzenie i używanie funkcji Przekazywanie argumentów do funkcji Domyślne wartości argumentów Przeładowanie nazw funkcji Dzielenie programu na kilka plików

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

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

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

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

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

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

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

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 2

PARADYGMATY PROGRAMOWANIA Wykład 2 PARADYGMATY PROGRAMOWANIA Wykład 2 Definiowanie klas w C++ - ciąg dalszy Lista inicjalizująca konstruktora Przeznaczenie - do inicjalizacji pól klasy z kwalifikatorem const i inicjalizacji obiektów składowych

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

Wstęp do programowania

Wstęp do programowania wykład 10 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Przesyłanie argumentów - cd Przesyłanie argumentów do funkcji - tablice wielowymiarowe Przekazywanie tablic wielowymiarowych

Bardziej szczegółowo

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

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Programowanie w C++ Wykład 8 Katarzyna Grzelak 15 kwietnia 2019 K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe

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

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

#include <iostream> using namespace std; void ela(int); int main( ); { Funkcja 3. return 0; }

#include <iostream> using namespace std; void ela(int); int main( ); { Funkcja 3. return 0; } #include using namespace std; Prototypy funkcji Funkcja 1 void ela(int); double info (double); int main( ); return 0; Funkcja 2 void ela(int); Funkcja 3 double info(double); return 4*t; jeszcze

Bardziej szczegółowo

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński Języki programowania Część druga Przetwarzanie tablic znaków Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

Konstruktor kopiujacy

Konstruktor kopiujacy Konstruktor kopiujacy Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego. Jest on udostępniony

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

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

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016 Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,

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

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

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Podstawy algorytmiki i programowania - wykład 4 C-struktury 1 Podstawy algorytmiki i programowania - wykład 4 C-struktury Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy

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

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziesiąta Rekordy w C/C++ struktury Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu,

Bardziej szczegółowo

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

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład V - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Programowanie obiektowe Dziedziczenie (inheritance) - mechanizm

Bardziej szczegółowo

Projektowanie klas c.d. Projektowanie klas przykład

Projektowanie klas c.d. Projektowanie klas przykład Projektowanie klas c.d. ogólne wskazówki dotyczące projektowania klas: o wyodrębnienie klasy odpowiedź na potrzeby życia (obsługa rozwiązania konkretnego problemu) o zwykle nie uda się utworzyć idealnej

Bardziej szczegółowo

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji Wprowadzenie do szablonów szablony funkcji Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do

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

Pola i metody statyczne

Pola i metody statyczne Pola i metody statyczne Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2009 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania

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

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.

Bardziej szczegółowo

Podstawy programowania w języku C i C++

Podstawy programowania w języku C i C++ Podstawy programowania w języku C i C++ Część czwarta Operatory i wyrażenia Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu,

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

Klasa, metody, rozwijanie w linii

Klasa, metody, rozwijanie w linii Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.

Bardziej szczegółowo

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 5 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 5 1 SPECYFIKATOR const Specyfikator (przydomek) const: Umieszczenie przed nazwą zmiennej specyfikatora const w jej definicji informuje kompilator,

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

TEMAT : KLASY POLIMORFIZM

TEMAT : KLASY POLIMORFIZM TEMAT : KLASY POLIMORFIZM 1. Wprowadzenie do polimorfizmu i funkcji wirtualnych w języku C++ Język C++ zakłada, że w pewnych przypadkach uzasadnione jest tworzenie klas, których reprezentanci w programie

Bardziej szczegółowo

Referencje do zmiennych i obiektów

Referencje do zmiennych i obiektów Referencje do zmiennych i obiektów Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu

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

Polimorfizm. dr Jarosław Skaruz

Polimorfizm. dr Jarosław Skaruz Polimorfizm dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com O czym będzie? finalne składowe klasy abstrakcyjne interfejsy polimorfizm Finalne składowe Domyślnie wszystkie pola i metody

Bardziej szczegółowo

Programowanie obiektowe. Materiały przygotował: mgr inż. Wojciech Frohmberg

Programowanie obiektowe. Materiały przygotował: mgr inż. Wojciech Frohmberg Programowanie obiektowe Materiały przygotował: mgr inż. Wojciech Frohmberg Konstruktor Konstruktor w językach zorientowanych obiektowo pełni podwójną rolę: przydziela pamięć na obiekt, zdefiniowany klasą

Bardziej szczegółowo

Programowanie - wykład 4

Programowanie - wykład 4 Programowanie - wykład 4 Filip Sośnicki Wydział Fizyki Uniwersytet Warszawski 20.03.2019 Przypomnienie Prosty program liczący i wyświeltający wartość silni dla wprowadzonej z klawiatury liczby: 1 # include

Bardziej szczegółowo

Podstawy i języki programowania

Podstawy i języki programowania Materiały dydaktyczne Podstawy i języki programowania Część trzecia Wprowadzenie do programowania w języku C++ Temat opracowania Łagodny start Autor Roman Simiński siminski@us.edu.pl Niniejsze opracowanie

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