Programowanie w języku C++

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

Download "Programowanie w języku C++"

Transkrypt

1 Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt 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 Overloading przeciążanie, co to takiego? Przeciążanie funkcji Przeciążanie funkcji (ang. function overloading) tworzenie większej liczby funkcji o takiej samej nazwie. Nazwa funkcji może być zatem użyta wielokrotnie do realizacji różnych czynności. Jest więc przeciążona dodatkowymi obowiązkami. Kompilator zadba o dobranie właściwej wersji funkcji przeciążonej w zależności od kontekstu jej wywołania. Przykład funkcji przeciążonej int add( int a, int b ) // 1-sza wersja funkcji przeciążonej add return a + b; double add( double a, double b ) // 2-ga wersja funkcji przeciążonej add return a + b; cout << endl << "Dodawanie int :" << add( 1, 1 ); cout << endl << "Dodawanie double :" << add( 1.0, 1.0 ); Copyright Roman Simiński Strona : 2

3 Overloading przeciążanie, co to takiego? Przeciążanie funkcji rygory Przeciążanie funkcji jest możliwe, jeżeli listy parametrów funkcji przeciążonych różnią sie od siebie: typami parametrów, liczbą parametrów, jednocześnie typami i liczbą parametrów. Funkcje o tych samych nazwach i listach parametrów, różniące się tylko typem rezultatu, nie są przez kompilator rozróżniane i powodują wystąpienie błędu kompilacji. Copyright Roman Simiński Strona : 3

4 Overloading przeciążanie, co to takiego? Dlaczego przeciążanie nie uwzględnia rezultatu funkcji? int addandprint( int a, int b ) cout << a + b; return a + b; void addandprint( int a, int b ) cout << a + b; int result = addandprint( 10, 20 ); // OK addandprint( 10, 20 ); Copyright Roman Simiński Strona : 4

5 Overloading przeciążanie funkcji, szczegóły implementacyjne Przeciążanie funkcji delikatne problemy Załóżmy, że dane są następujące funkcje: void printdata( long num ) cout << "Liczba long: " << num << endl; void printdata( float num ) cout << "Liczba float: " << num << endl; void printdata( double num ) cout << "Liczba double: " << num << endl; Te wywołania są poprawne: long ln = 200; float fn = 200; double dn = 200; printdata( ln ); printdata( fn ); printdata( dn ); Copyright Roman Simiński Strona : 5

6 Overloading przeciążanie funkcji, szczegóły implementacyjne Przeciążanie funkcji delikatne problemy To wywołanie jest niepoprawne: printdata( 200 ); To poprawne, leczy być może zaskakujące: printdata( 3.14 ); Natomiast, gdyby istniały tylko dwie, następujące wersje funkcji printdata: void printdata( long num ) cout << "Liczba long: " << num << endl; void printdata( float num ) cout << "Liczba float: " << num << endl; printdata( 3.14 ); Copyright Roman Simiński Strona : 6

7 Overloading przeciążanie funkcji, szczegóły implementacyjne Przeciążanie funkcji zasady definiowania funkcji 1. Sygnatury i typ rezultatu są jednakowe, zakłada się deklarację tej samej funkcji, różnice w nazwach parametrów nie są znaczące: void printdata( long num ); void printdata( long number ); 2.Sygnatury są jednakowe, typy rezultatów są różne, kompilator potraktuje drugą deklarację jako niepoprawną redeklarację tej samej funkcji i zgłosi błąd: void printdata( long num ); long printdata( long num ); Uwaga przy doborze wersji funkcji przeciążonej typ rezultatu nie jest brany pod uwagę! 3.Sygnatury obu funkcji różnią są typami parametrów lub ich liczbą, mamy dwie wersje funkcji przeciążonej: int printdata( int num ); long printdata( long num ); Nazwa zdefiniowana przez typedef nie oznacza nowego typu: typedef int Integer; int printdata( int num ); Integer printdata( Integer num ); Copyright Roman Simiński Strona : 7

8 Overloading przeciążanie funkcji, szczegóły implementacyjne Przeciążanie funkcji rozróżnianie wersji Poszczególne wersje funkcji przeciążonej różni sygnatura nazwa funkcji i lista parametrów. Określenie, która wersja funkcji przeciążonej ma być wywołana w danym kontekście nazywa się rozróżnianiem wersji lub rozpoznawaniem wywołania (ang. function call resolution). Najważniejszym elementem rozpoznawania wywołania jest dopasowywanie parametrów (ang. argument matching). Polega on na porównaniu parametrów aktualnych wywołania z parametrami formalnymi funkcji. Proces dopasowania parametrów może skończyć się jednym z wariantów: udane dopasowanie, dopasowanie nie jest możliwe, dopasowanie jest niejednoznaczne. Copyright Roman Simiński Strona : 8

9 Overloading przeciążanie funkcji, szczegóły implementacyjne Przeciążanie funkcji rodzaje dopasowania void printdata( long num ); void printdata( float num ); void printdata( double num ); Udane dopasowanie printdata( 10L ); printdata( 10.5f ); printdata( 10.5 ); Dopasowanie nie jest możliwe printdata( "10" ); Dopasowanie jest niejednoznaczne printdata( 10 ); Copyright Roman Simiński Strona : 9

10 Overloading przeciążanie funkcji, szczegóły implementacyjne Przeciążanie funkcji jak uzyskać ścisłe dopasowanie? Istnieją cztery sposoby uzyskania ścisłego dopasowania, stosowane w następującej kolejności: ścisła zgodność, zgodność dzięki awansowaniu (ang. through promotion), zgodność dzięki standardowym przekształceniom typów, zgodność dzięki przekształceniom typów definiowanym przez programistę. Copyright Roman Simiński Strona : 10

11 Overloading przeciążanie funkcji, szczegóły implementacyjne Ścisła zgodność Typy parametru aktualnego i formalnego są identyczne: void printdata( int ); void printdata( char * ); printdata( 0 ); printdata( "Napis" ); Wersja zgodna z printdata( int ) Wersja zgodna z printdata( char * ) // Można stosować jawne rzutowanie typów printdata( ( char * )0 ); Wersja zgodna z printdata( char * ) Copyright Roman Simiński Strona : 11

12 Overloading przeciążanie funkcji, szczegóły implementacyjne Zgodność dzięki awansowaniu Jeżeli nie występuje ścisła zgodność, to przed następną próbą dopasowania, typ parametru aktualnego jest poszerzany wg. następujących zasad : Parametr typu char, unsigned char lub short awansują do typu int. Jeżeli rozmiary typu int i short są równe, parametr unsigned short awansuje do unsigned int, w przeciwnym wypadku do int. Parametr typu float awansuje do typu double. Parametr typu wyliczeniowego awansuje do typu int. void printdata( int ); void printdata( short ); void printdata( long ); printdata( 'a' ); printdata( 3.14 ); Wersja zgodna z printdata(int), 'a' awansuje do typu int. Brak możliwości awansu odwołanie niejednoznaczne. void printdata( char ); void printdata( int ); void printdata( unsigned int ); unsigned char uc; printdata( uc ); Wersja zgodna z printdata( int ), uc awansuje do int. Copyright Roman Simiński Strona : 12

13 Overloading przeciążanie funkcji, szczegóły implementacyjne Zgodność dzięki standardowym przekształceniom typów Jeżeli nie występuje ścisła zgodność, nawet po zastosowaniu awansowania parametru aktualnego, przed następną próbą dopasowania zastosowane zostaną standardowe przekształcenia typów wg. następujących zasad : Każdy argument aktualny typu liczbowego będzie zgodny z dowolnym innym typem liczbowym parametru formalnego. Każdy argument aktualny typu wyliczeniowego będzie zgodny z dowolnym typem liczbowym parametru formalnego. Literał 0 będzie zgodny z parametrem formalnym typu wskaźnikowego jak i typu liczbowego. Wskaźnik do dowolnego typu będzie zgodny z parametrem formalnym typu void *. void printdata( int ); void printdata( float); printdata( 3.14 ); void printdata( int ); printdata( 3.14 ); Dwa możliwe przekształcenia, odwołanie niejednoznaczne. Wersja printdata( int ), standardowe przekształcenie, nieco dziwne być może.... Copyright Roman Simiński Strona : 13

14 Overloading przeciążanie funkcji, szczegóły implementacyjne Zgodność dzięki przekształceniom typów definiowanym przez programistę Jeżeli żaden z poprzednich sposobów nie doprowadził do dopasowania parametrów to dokonuje się zdefiniowanych przez programistę przekształceń typów o ile takie istnieją. Definiowanie przekształceń typów dotyczy klas, dla nich można definiować operatory zwane operatorami przekształcenia typu. Pozwalają one na zdefiniowanie sposobu konwersji obiektu pewnej klasy na obiekt zadanego typu. Szczegółowe omówienie operatorów przekształcenia typów nastąpi później. Copyright Roman Simiński Strona : 14

15 Overloading przeciążanie funkcji, szczegóły implementacyjne Od klasy do typu wbudowanego z operatorem konwersji typu: class Integer64 public: operator int();... ; Operator przekształcenia obiektu klasy Integer64 do typu int. Integer64 i; void printdata( int ); void printdata( float ); printdata( i ); Wersja fun( int ), wg. przekształcenia w klasie Integer64. Copyright Roman Simiński Strona : 15

16 Overloading przeciążanie funkcji, szczegóły implementacyjne Zgodność dzięki przekształceniom typów definiowanym przez programistę, cd.... Kompilator będzie w trakcie dopasowywania parametrów będzie używał konwersji konstruktorowych. Polega ona na niejawnym utworzeniu obiektu tymczasowego i zainicjowaniu go odpowiednim konstruktorem. Jeżeli w jakieś klasie C istnieje konstruktor posiadający pojedynczy parametr typu T, to kompilator użyje tego konstruktora zawsze, gdy konieczna jest konwersja obiektu typu T na obiekt klasy C. Copyright Roman Simiński Strona : 16

17 Overloading przeciążanie funkcji, szczegóły implementacyjne Od typu wbudowanego do klasy, z wykorzystaniem konstruktora: class Integer64 public: Integer64(); Integer64( int i );... ; void printdata( Integer64 & num ); printdata( 1 ); Wersja printdata( Integer64 & ) Utworzenie niejawnego obiektu tymczasowego i zainicjowanie go konstruktorem Integer64( int ): printdata( Integer64( 1 ) ) Działa to również w sposób analogiczny w przypadku konwersji pomiędzy dwoma klasami. Copyright Roman Simiński Strona : 17

18 Overloading przeciążanie funkcji, szczegóły implementacyjne Wywołania z wieloma parametrami Następuje próba dopasowania każdego argumentu wg. zasad podanych wcześniej. Stosowany jest algorytm koniunkcji (ang. intersection rule). Wybiera się wersje o co najmniej takiej samej zgodności każdego z parametrów oraz typuje się tą wersję, która posiada najpełniejsze dopasowanie dla przynajmniej jednego parametru. Odwołanie uznaje się za niejednoznaczne, jeżeli: żadna wersja nie posiada parametru najbardziej zgodnego, więcej niż jedna wersja zawiera najpełniej zgodny parametr. void fun( int, int ); void fun( char *, int ); fun( 0, 'a' ); void fun( int, int ); void fun( long, long ); int i, j; fun( i, j ); void fun( int, int ); void fun( double, double ); fun( 'a', 3.14f ); Wersja fun( int, int ), pełna zgodność dla 0 z int oraz równa zgodność 'a' w obu wersjach. Nie istnieje najpełniejsze dopasowanie Dwie funkcje posiadają parametr najbardziej zgodny. Copyright Roman Simiński Strona : 18

19 Overloading przeciążanie funkcji, szczegóły implementacyjne Wywołania z parametrami domyślnymi Dla funkcji z parametrami domyślnymi stosuje się zwykłe zasady dopasowania, zgodność może dotyczyć zarówno wersji z bez parametrów domyślnych jak i wersji z parametrami. void printdata( int ); void printdata( long, int = 0 ); printdata( 0, 0 ); Wersja zgodna z printdata( long, int ) printdata( 0 ); Wersja zgodna z printdata( int ) printdata( 10L ); Wersja zgodna z printdata( long, int ) printdata( 3.14 ); Wywołanie niejednoznaczne Copyright Roman Simiński Strona : 19

20 Overloading przeciążanie funkcji, podsumowanie Przeciążanie funkcji krótkie podsumowanie Dzięki możliwości przeciążania funkcji: programista może stosować jednakowe, spójne nazwy funkcji mimo różnic w typach i liczbie parametrów, poszczególne wersje funkcji mogą być prostsze i łatwiejsze do napisania, być może niektóre wersje funkcji będą wyraźnie szybsze. int sqrt( int num ); float sqrt( float num ); double sqrt( double num ); Dobór odpowiedniej wersji funkcji przeciążonej: odbywa się na etapie kompilacji i jest pamiętany w kodzie wynikowym, nie wpływa na efektywność wykonania programu, jest prosty i oczywisty w przypadkach jednoznacznych, może powodować błędy kompilacji kub nieprzewidziane zachowanie kodu w przypadku gdy parametry wywołania nie pasują do parametrów formalnych funkcji. Copyright Roman Simiński Strona : 20

21 Overloading przeciążanie funkcji, podsumowanie Przeciążanie funkcji uwagi na zakończenie Z funkcjami przeciążonymi wiąże się jeszcze kilka istotnych zagadnień: Przeciążone funkcje składowe klas, Przeciążone funkcje składowe klas w hierarchii klas, Przeciążanie funkcji a zasięg identyfikatorów. Przeciążone funkcje składowe kontra funkcje wirtualne, czyli jak jest różnica pomiędzy przeciążaniem a redefinicją. Przeciążone funkcje kontra funkcje wzorcowe, czyli kiedy przeciążać funkcje a kiedy definiować ją z wykorzystaniem wzorców (szablonów). Mówiąc o przeciążaniu funkcji autorzy książek często używają pojęcia polimorfizmu funkcji. Jednak pojęcie polimorfizmu występuje głównie w kontekście obiektów wykorzystujących metody wirtualne. W obu tych kontekstach rozumienie polimorfizmu może być nieco inne. Wiele interesujących informacji na funkcji przeciążonych zawiera książka: S.B. Lippman, J. Lajoie, Podstawy języka C++,WNT, oraz jej poprzednie wersje. Copyright Roman Simiński Strona : 21

22 Overloading przeciążanie funkcji, podsumowanie Przeciążanie funkcji czy bez tego można się obejść? Zamiast przeciążania funkcji można zdefiniować jej różne wersje i ręcznie zaopatrzyć je w odpowiedni przedrostek lub przyrostek: void printdataint ( int num ); void printdatalong ( long num ); void printdatadouble( double num ); Albo napisać to jak w starym, dobrym C: enum DataTypes INT, LONG, DOUBLE ; printdata( INT, &in ); void printdata( int datatype, void * data ) printdata( LONG, &ln ); printdata( DOUBLE, &dn ); switch( datatype ) case INT : cout << "Liczba int: "; cout << *( ( int * )data ) << endl; break; case LONG : cout << "Liczba long: "; cout << *( ( long * )data ) << endl; break; case DOUBLE : cout << "Liczba double: "; cout << *( ( double * )data ) << endl; break; Copyright Roman Simiński Strona : 22

23 Przeciążanie operatorów koncepcja Problem Należy napisać program realizujący obliczenia dla układów prądu sinusoidalnie zmiennego. Do realizacji tych obliczeń wykorzystuje się liczby zespolone do tego celu należy zbudować klasę reprezentującą liczbę zespoloną, klasę Complex. Podbudowa teoretyczna W świecie liczb rzeczywistych zakłada się nieistnienie pierwiastka z liczby nieujemnej. W XVI wieku wprowadzono pojęcie jednostki urojonej i o własności: i 2 = 1. Można z tego wysnuć wniosek, że, w istocie jednak niepoprawny, dlatego że dalej nie pierwiastkuje sie liczb ujemnych.. Za liczbę zespoloną z przyjmuje się zatem liczbę w następującej postaci: z = a + bi, gdzie i 2 = 1 Liczbę (rzeczywistą) a nazywamy częścią rzeczywistą, zaś liczbę b częścią urojoną liczby zespolonej z. Podstawowe operacje na liczbach zespolonych w tej postaci: (a+bi)+(c+di)=(a+c)+(b+d)i (a+bi)-(c+di)=(a-c)+(b-d)i (a+bi) (c+di)=(ac-bd)+(bc+ad)i. a+ bi ( ac + bd) ( bc - ad) = + i c + di ( c 2 + b 2 ) ( c 2 + b 2 ) Copyright Roman Simiński Strona : 23

24 Przeciążanie operatorów koncepcja Klasa Complex pierwsza wersja class Complex public: // Konstruktor ogólny dzięki parametrom domyślnym staje sie te ż // domyślnym, konstruktor kopiujący nie jest konieczny. Complex( double re = 0, double im = 0 ); // Akcesory double getreal() const; double getimag() const; void setreal( double newval ); void setimag( double newval ); private: double real; // Część rzeczywista double imag; // Część urojona ; Copyright Roman Simiński Strona : 24

25 Przeciążanie operatorów koncepcja Klasa Complex pierwsza wersja, implementacja funkcji składowych Complex::Complex( double re, double im ) : real( re ), imag( im ) double Complex::getReal() const return real; double Complex::getImag() const return imag; void Complex::setReal( double newval ) real = newval; void Complex::setImag( double newval ) imag = newval; Copyright Roman Simiński Strona : 25

26 Przeciążanie operatorów koncepcja Klasa Complex jak ją wykorzystać? Complex z1; // Konstruktor: z1.complex(); parametr domyślny! Complex z2( 2 ); // Konstruktor: z2.complex( 2 ); parametr domyślny! complex z3( 1, 1 ); // Konstruktor: z2.complex( 1, 1 ); // Dodawanie liczb zespolonych wersja siermiężna z1.setreal( z2.getreal() + z3.getreal() ); z1.setimag( z2.getimag() + z3.getimag() ); Czy nie można tak: // Działania na liczbach zespolonych wersja poprawiona z1 = z2 + z3;... z1 = z2 * z3;... Można! Tylko skąd kompilator ma wiedzieć, jak dodawać, mnożyć, dzielić czy odejmować liczby zespolone? Należy go tego nauczyć! Polega to na związaniu z klasą Complex zestawu operatorów, realizujących określone działania zgodnie z intencjami programisty. Copyright Roman Simiński Strona : 26

27 Przeciążanie operatorów koncepcja Operatory są w naturalny sposób przeciażone Koncepcja przeciążania w przypadku operatorów jest oczywista i całkiem naturalna. Operatory potrafią wykonywać określone działania dla danych różnych typów; int ia, ib, ic;... ic = ia + ib; float fa, fb, fc;... fc = fa + fb; Również w innych językach operatory są w naturalny sposób przeciążone, niejednokrotnie nie tylko dla typów liczbowych (język Pascal, impl. Borland): Var SA, SB, SC : String;... SA := 'Operatory s ą '; SB := 'przeciążone robot ą'; SC := SA + SB; WriteLn( SC ); Copyright Roman Simiński Strona : 27

28 Przeciążanie operatorów koncepcja Jak zmusić operatory języka C++ do działania zgodnie z rachunkiem liczb zespolonych? Koncepcja przeciążania operatorów w języku C++ nie jest nowa. Nowością jest potraktowanie użycia operatora jako wywołania specjalnej funkcji, zwanej funkcją operatorową. Programista może napisać dla większości operatorów specjalne funkcje, określające sposób działania danego operatora dla argumentów, z których przynajmniej jeden jest obiektem. Generalne zasady wykorzystania funkcji operatorowych Nie wolno zmieniać znaczenia operatora określonego dla wbudowanych typów danych. Nie wolno budować nowych operatorów. Przynajmniej jeden argument funkcji operatorowej musi być obiektem jakiejś klasy. Nie wolno zmieniać zdefiniowanych pierwotnie reguł pierwszeństwa operatorów. Musi być zachowana liczba argumentów operatora. Copyright Roman Simiński Strona : 28

29 Przeciążanie operatorów koncepcja Operatory jako funkcje, użycie operatora jako wywołanie funkcji Weźmy pod lupę operator przypisania = Complex z1; Complex z2( 1, 2 ); z1 = z2; Czy takie zastosowanie zgodne jest ustalonymi zasadami? Tak, bowiem: oba argumenty są obiektami klasy; Jest to istniejący operator z dozwolonego zestawu, nie następuje zmiana reguł pierwszeństwa i liczby argumentów. Definiujemy funkcje operatorową dla operatora = klasy Complex class Complex public:... void operator = ( Complex & z );... ; Copyright Roman Simiński Strona : 29

30 Przeciążanie operatorów koncepcja Operatory jako funkcje, użycie operatora jako wywołanie funkcji, cd.... Implementacja funkcji operatorowej void Complex::operator = ( Complex & z ) real = z.real; // Lub setreal( z.getreal() ); imag = z.imag; // Lub setimag( z.getimag() ); Jak to działa? Complex z1; Complex z2( 1, 2 ); z1 = z2; Wywołanie: z1.operator=( z2 ); real: imag: z1 1 2 real: imag: z2 1 2 void Complex::operator = ( Complex & z ) real = z.real; imag = z.imag; Copyright Roman Simiński Strona : 30

31 Przeciążanie operatorów operator przypisania = Czy nasz operator przypisania jest dobry i w tym przypadku? Complex z1; Complex z2; complex z3( 1, 2 ); z1 = z2 = z3; z2.operator = ( z3 ) Wywołanie: z1.operator = (? ); Complex & Complex::operator = ( Complex & z ) real = z.real; imag = z.imag; return *this; this w obrębie definicji każdej funkcji składowej klasy występuje wskaźnik this. Wskazuje on zawsze na obiekt, dla którego została wywołana dana funkcja składowa. real: imag: z1 1 2 real: imag: z2 1 2 real: imag: z3 1 2 z1.operator = ( z2.operator = ( z3 ) ); Copyright Roman Simiński Strona : 31

32 Przeciążanie operatorów operator przypisania = Operator przypisania, analizy ciąg dalszy A co gdy napiszemy tak? z1 = z1; Zabezpieczenie przed przypisaniem do samego siebie Complex & Complex::operator = ( const Complex & z ) if( &z!= this ) real = z.real; imag = z.imag; Przy okazji, umieszczenie const pozwala na: const Complex a( 0, 0 ); Complex b; return *this; b = a; Operator przypisania kontra konstruktor kopiujący Complex z1( 1, 2 ); Complex z2 = z1; Konstruktor kopiujący z2 = z1; Operator przypisania Copyright Roman Simiński Strona : 32

33 Przeciążanie operatorów operator przypisania = Czy musimy przeciążać operator = i definiować konstruktor kopiujący? Jeżeli operator przypisania nie jest jawnie zdefiniowany dla danej klasy, a jest potrzebny kompilatorowi, generuje on domyślny operator przypisania, realizujący kopiowanie pole-po-polu. Jeżeli konstruktor kopiujący nie jest jawnie zdefiniowany dla danej klasy, a jest potrzebny kompilatorowi, realizuje on inicjalizację obiektu wykorzystując kopiowanie pole-po-polu. No to w końcu używać, nie używać? Stosowanie konstruktora kopiującego i przeciążonego operatora przypisania jest dobrą, programistyczną praktyką. Dzięki jawnym definicjom programista ma kontrolę nad kopiowaniem wartości, występujących w wielu, czasem zaskakujących sytuacjach. Naprawdę mało klas jest tak prostych, że nie potrzebują konstruktora kopiującego ani przeciążonego operatora przypisania. Operator przypisania jest nierozerwalnie związany z klasą i może być definiowany jedynie jako funkcja składowa klasy. Copyright Roman Simiński Strona : 33

34 Przeciążanie operatorów operator przypisania = Klasa Complex po poprawkach class Complex public: // Konstruktory Complex( double re = 0, double im = 0 ); Complex( const Complex & z ); // Akcesory double getreal() const; double getimag() const; void setreal( double newval ); void setimag( double newval ); // Operator przypisania Complex & operator = ( const Complex & z ); private: double real; // Część rzeczywista double imag; // Część urojona ; Copyright Roman Simiński Strona : 34

35 Przeciążanie operatorów operator przypisania = Klasa Complex po poprawkach, cd.... // Konstruktory Complex::Complex( double re, double im ) : real( re ), imag( im ) Complex::Complex( const Complex & z ) : real( z.real ), imag( z.imag ) // Akcesory double Complex::getReal() const return real; double Complex::getImag() const return imag; void Complex::setReal( double newval ) real = newval; void Complex::setImag( double newval ) imag = newval; // Operator przypisania Complex & Complex::operator = ( const Complex & z ) if( &z!= this ) real = z.real; imag = z.imag; return *this; Copyright Roman Simiński Strona : 35

36 Przeciążanie operatorów operator dodawania + Chcemy dodawać liczby zespolone Complex z1; Complex z2( 2 ); complex z3( 1, 1 ); z1 = z2 + z3; Rozszerzamy klasę Complex o przeciążony operator dodawania class Complex public:... Complex operator + ( const Complex & z );... ; Implementacja, wersja 1-sza Complex Complex::operator + ( const Complex & z ) Complex tmp; // Obiekt tymczasowy do przechowania sumy tmp.real = real + z.real; tmp.imag = imag + z.imag; return tmp; Copyright Roman Simiński Strona : 36

37 Przeciążanie operatorów operator dodawania + Jak to działa? Complex z1; Complex z2( 2 ); complex z3( 1, 1 ); z2 + z3; Wywołanie: z2.operator + ( z3 ); Razem z operatorem przypisania z1 = z2 + z3; Wywołanie: z1.operator = ( z2.operator + ( z3 ) ); Implementacja, wersja 2-ga Complex Complex::operator + ( const Complex & z ) return Complex( real + z.real, imag + z.imag ); Dlaczego rezultat operatora + nie jest referencją? W C i C++ rezultatem funkcji nie powinien być wskaźnik ani referencja do zmiennych automatycznych funkcji. Te lokowane są zwykle na stosie i po zakończeniu działania funkcji przestają istnieć. Copyright Roman Simiński Strona : 37

38 Przeciążanie operatorów operator odejmowania - Chcemy odejmować liczby zespolone Complex z1; Complex z2( 2 ); complex z3( 1, 1 ); z1 = z2 - z3; Rozszerzamy klasę Complex o przeciążony operator odejmowania class Complex public:... Complex operator - ( const Complex & z );... ; Implementacja operatora - Complex Complex::operator - ( const Complex & z ) return Complex( real - z.real, imag - z.imag ); Copyright Roman Simiński Strona : 38

39 Przeciążanie operatorów operator - Chcemy zmienić znak liczby zespolonej Complex z1; Complex z2( 2, 2 ); z2 = -z1 Rozszerzamy klasę Complex o przeciążony operator zmiany znaki ( unarny minus ) class Complex public:... Complex operator - ( const Complex & z ); Complex operator - ();... ; Implementacja jednoargumentowego operatora - Complex Complex::operator - () return Complex( - real, - imag ); Jak to działa? z2 = -z1; z1 = z2 - z3; Wywołanie: z2.operator = ( z1.operator - () ); Wywołanie: z1.operator = ( z2.operator - ( z3 ) ); Copyright Roman Simiński Strona : 39

40 Przeciążanie operatorów funkcja składowa czy zwykła? Niby jest świetnie, ale... Complex z; double d; z + d; d + z; Wywołanie: z.operator + ( Complex( d ) ); Wywołanie:??? Funkcja operatorowa nie musi być (z pewnymi wyjątkami) zdefiniowana jako funkcja składowa a jako zwykła funkcja, posiadająca przynajmniej jeden argument będący obiektem. Dla jednoargumentowego operatora # oraz obiektu O: #O oznacza wywołanie funkcji składowej O.operator#(), zwykłej operator#( O ). Dla dwuoargumentowego operatora # oraz obiektów X i Y: X # Y oznacza wywołanie funkcji składowej X.operator#( Y ), zwykłej operator#( X, Y ). Copyright Roman Simiński Strona : 40

41 Przeciążanie operatorów funkcja składowa czy zwykła? Implementacja operatorów w postaci zwykłych funkcji Complex operator + ( double num, const Complex & z ) return Complex( num + z.getreal(), z.getimag() ); Nieskładowa funkcja operatorowa w akcji d + z1; Wywołanie: operator + ( d, z1 ); Z operatorem przypisania z2 = d + z1; Wywołanie: z2.operator = ( operator + ( d, z1 ) ); Copyright Roman Simiński Strona : 41

42 Przeciążanie operatorów funkcja składowa czy zwykła? Nieskładowa funkcja operatorowa ma utrudniony dostęp do pól Complex operator + ( double num, const Complex & z ) return Complex( num + z.getreal(), z.getimag() ); Aby funkcja nieskładowa miała wygodniejszy dostęp do pól klasy, może się z nią zaprzyjaźnić. Taka funkcja może mieć bezpośredni dostęp do prywatnych pól klasy. Nieskładowa, zaprzyjaźniona funkcja operatorowa class Complex... friend Complex operator + ( double num, const Complex & z );... ; Complex operator + ( double num, const Complex & z ) return Complex( num + z.real, z.imag ); Copyright Roman Simiński Strona : 42

43 Przeciążanie operatorów funkcja składowa czy zwykła? Nieskładowa funkcje operatorowe na każdą okazję class Complex... friend Complex operator + ( double num, const Complex & z ); friend Complex operator + ( const Complex & z, double num ); friend Complex operator + ( const Complex & z1, const Complex & z2 );... ; Complex operator + ( double num, const Complex & z ) return Complex( num + z.real, z.imag ); Complex operator + ( const Complex & z, double num ) return Complex( num + z.real, z.imag ); Complex operator + ( const Complex & z1, const Complex & z2 ) return Complex( z1.real + z2.real, z1.imag + z2.imag ); Copyright Roman Simiński Strona : 43

44 Przeciążanie operatorów funkcja składowa czy zwykła? Wykorzystanie funkcji nieskładowych z2 = 2 + z3; z4 = z3 + 2; z1 = z2 + z3; z2.operator = ( operator + ( double, Complex ) ); z4.operator = ( operator + ( Complex, double ) ); z1.operator = ( operator + ( Complex, Complex ) ); A gdyby tak pozostawić tylko jedną funkcję nieskładową? class Complex... friend Complex operator + ( const Complex & z1, const Complex & z2 );... ; z2 = 2 + z3; z4 = z3 + 2; z1 = 2 + 3; z2.operator=( operator+( Complex(double), Complex ) ); z4.operator=( operator+( Complex, Complex(double) ) ); z1.operator=(operator+(complex(double),complex(double))); Copyright Roman Simiński Strona : 44

45 Przeciążanie operatorów przeciążanie operatorów ++ i Problem dwie wersje operatorów ++ i z1++; ++z1; --z2; z2--; Do wersji 3.0 języka C++ nie istniało rozróżnienie pomiędzy operatorami w wersji przedrostkowej i przyrostkowej. Teraz wersja przyrostkowa obsługiwana jest przez funkcję operatorową, definiowaną z parametrem typu int. Nie odgrywa on żadnego znaczenia praktycznego, jest istotny ze względu na syntaktykę języka. Rozszerzamy klasę Complex o przeciążone operatory ++ i class Complex public:... Complex & operator ++ (); Complex operator ++ ( int );... Complex & operator -- (); Complex operator -- ( int );... ; // Postać przedrostkowa // Postać przyrostkowa // Postać przedrostkowa // Postać przyrostkowa Copyright Roman Simiński Strona : 45

46 Przeciążanie operatorów przeciążanie operatorów ++ i Implementacja operatorów przedrostkowych Complex & Complex::operator ++ () ++real; Zwiększ część rzeczywistą i urojoną o 1 ++imag; return *this; Oddaj zmodyfikowany obiekt Complex & Complex::operator -- () --real; --imag; Zmniejsz część rzeczywistą i urojoną o 1 return *this; Oddaj zmodyfikowany obiekt Wywołanie operatorów przedrostkowych z1 = ++z2; z1 = --z2; Wywołanie: z1.operator = ( z2.operator ++ () ); Wywołanie: z1.operator = ( z2.operator -- () ); Copyright Roman Simiński Strona : 46

47 Przeciążanie operatorów przeciążanie operatorów ++ i Implementacja operatorów przyrostkowych Complex Complex::operator ++ ( int ) Complex copy; Zapamiętaj w copy wartość obiektu przed inkrementacją copy = *this; ++real; ++imag; return copy; Zwróć kopię wartości obiektu z przed inkrementacji Complex Complex::operator -- ( int ) Complex copy( *this ); --real; --imag; return copy; Tu nieco krócej konstruktor kopiujący Wywołanie operatorów przyrostkowych z1 = z2++; z1 = z2--; Wywołanie: z1.operator = ( z2.operator ++ (0) ); Wywołanie: z1.operator = ( z2.operator -- (0) ); Copyright Roman Simiński Strona : 47

48 Przeciążanie operatorów wirtualna tablica FileArray Problem Zdefiniować klasę FileArray, przechowującą znaki w pliku, pozwalającą na wykonywanie operacji zbliżonych do tych, które wolno wykonać na zwykłej tablicy. FileArray tab( "temp.dat" ); if( tab.ready() ) for( int i = 0; i < 26; i++ ) tab[ i ] = 'A' + i; for( int i = 0; i < tab.size(); i++ ) cout << tab[ i ]; Copyright Roman Simiński Strona : 48

49 Przeciążanie operatorów wirtualna tablica FileArray Definicja klasy class FileArray public: FileArray( char * filename ); ~FileArray(); bool ready() const; Te funkcje operatorowe są tu najważniejsze FileArray & operator = ( char c ); FileArray & operator [] ( long ); operator char(); long size() const; private: FILE * file; void operator &() ; ; Nie pozwól pobrać adresu tej tablicy! Copyright Roman Simiński Strona : 49

50 Przeciążanie operatorów wirtualna tablica FileArray Definicja funkcji składowych FileArray::FileArray( char * filename ) : file( 0 ) file = fopen( filename, "w+b" ); FileArray::~FileArray() if( file ) fclose( file ); bool FileArray::ready() const return ( file!= 0 ); long FileArray::size() const long currpos = ftell( file ); fseek( file, 0, SEEK_END ); long len = ftell( file ); fseek( file, currpos, SEEK_SET ); return len; Copyright Roman Simiński Strona : 50

51 Przeciążanie operatorów wirtualna tablica FileArray Definicja funkcji składowych FileArray & FileArray::operator = ( char c ) if( file ) fputc( c, file ); fflush( file ); return *this; FileArray & FileArray::operator [] ( long i ) if( file ) fseek( file, i, SEEK_SET ); return *this; FileArray::operator char() if( file ) fgetc( file ); Copyright Roman Simiński Strona : 51

52 Przeciążanie operatorów wirtualna tablica FileArray Definicja funkcji składowych FileArray tab( "temp.dat" ); if( tab.ready() ) cout << "Zapisywanie" << endl; for( int i = 0; i < 26; i++ ) tab[ i ] = 'A' + i; cout << char( 'A' + i ); tab.operator[](i).operator=( 'A' + i ); cout << endl << "Rozmiar tablicy: " << tab.size() << endl; cout << "Odczytywanie:" << endl; for( int i = 0; i < tab.size(); i++ ) cout << tab[ i ]; tab.operator[]( i ).operator char(); Copyright Roman Simiński Strona : 52

53 Przeciążanie operatorów podsumowanie Operatory, które można przeciążać Operatory, których przeciążać nie wolno Czego nie wolno a co trzeba + - * / % ~ & ^!, = < > <= >= << >> ==!= && += -= /= %= ^= &= = *= <<= >>= [] () -> ->* new delete ::.*.?: Nie wolno zmieniać znaczenia operatora określonego dla wbudowanych typów danych. Nie wolno budować nowych operatorów. Przynajmniej jeden argument funkcji operatorowej musi być obiektem jakiejś klasy. Nie wolno zmieniać zdefiniowanych pierwotnie reguł pierwszeństwa operatorów. Musi być zachowana liczba argumentów operatora. Copyright Roman Simiński Strona : 53

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

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

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

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

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

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

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

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

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

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

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

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

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++ 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

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

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

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

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

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

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

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

Szablony. Szablony funkcji

Szablony. Szablony funkcji Szablony Szablony sa mechanizmem ponownego wykorzystania kodu (reuse) W przypadku funkcji ponownie wykorzystany jest algorytm W przypadku klas ponownie wykorzystane sa wszystkie skladowe Deklaracja szablonu

Bardziej szczegółowo

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

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.: Program przedmiotu Programowanie Obiektowe (język C++) Wykład 1. Definiowanie prostych klas. Przykłady. Przypomnienie: typy referencyjne, domyślne wartości argumentów, przeciąŝanie funkcji. Konstruktory,

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

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

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

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

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

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

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

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

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

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

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

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

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład I - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Zaliczenie przedmiotu Do zaliczenia przedmiotu niezbędne jest

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

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Dr inż. Grażyna KRUPIŃSKA Grazyna.Krupinska@fis.agh.edu.pl D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Wyrażenia 2 Wyrażenia w języku C są bardziej elastyczne niż wyrażenia w jakimkolwiek innym języku

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

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

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

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

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

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

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

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

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

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

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 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

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

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

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych

Bardziej szczegółowo

Przeciążenie (przeładowanie nazw) funkcji

Przeciążenie (przeładowanie nazw) funkcji Przeciążenie (przeładowanie nazw) funkcji dla większości języków (w tym C) zasada w programie może być tylko jedna funkcja o danej nazwie kompilator C++ - dopuszcza więcej niż jedną funkcję o tej samej

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

Dodatkowo klasa powinna mieć destruktor zwalniający pamięć.

Dodatkowo klasa powinna mieć destruktor zwalniający pamięć. Zadanie 1. Utworzyć klasę reprezentującą liczby wymierne. Obiekty klasy powinny przechowywać licznik i mianownik rozłożone na czynniki pierwsze. Klasa powinna mieć zdefiniowane operatory czterech podstawowych

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

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

Przeciążenie operatorów

Przeciążenie operatorów Przeciążenie operatorów W C++ można przeciążyć większość operatory tak, żeby wykonywali zadania, charakterystyczne dla danej klasy Po przeciążeniu odpowiednich operatorów można posługiwać się obiektami

Bardziej szczegółowo

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

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.: Program przedmiotu Programowanie (język C++) Wykład 1. Język C a C++. Definiowanie prostych klas. Typy referencyjne. Domyślne wartości argumentów. PrzeciąŜanie funkcji. Konstruktory, destruktory. Definiowanie

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

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

Zaawansowane programowanie w języku C++ Przeciążanie operatorów

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

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część trzynasta Tablice struktur, pliki struktur Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści

Bardziej szczegółowo

Lab 9 Podstawy Programowania

Lab 9 Podstawy Programowania Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany

Bardziej szczegółowo

Abstrakcyjny typ danych

Abstrakcyjny typ danych Abstrakcyjny typ danych Abstrakcyjny Typ Danych (abstract data type-adt): zbiór wartości wraz z powiązanymi z nimi operacjami; operacje są zdefiniowane w sposób niezależny od implementacji; operacje są

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

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

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

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

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 6 - szablony. dr inż. Robert Nowak - p. 1/15 Kolekcje i algorytmy» Deklaracja szablonu y Pojęcia niezależne od typu: kolekcje (np. listy) algorytmy (np. znajdowania

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

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

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

MATERIAŁY DO ZAJĘĆ II

MATERIAŁY DO ZAJĘĆ II MATERIAŁY DO ZAJĘĆ II Zmienne w C# Spis treści I. Definicja zmiennej II. Hierarchia typów (CTS) III. Typy wbudowane IV. Deklaracja zmiennych V. Literały VI. Pobieranie i wypisywanie wartości zmiennych

Bardziej szczegółowo

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Informatyka I Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2019 1 Plan wykładu

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

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński Języki programowania Część siódma Przetwarzanie plików amorficznych Konwencja języka C Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

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

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

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

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

Programowanie w C++ - wybrane przykłady szablonów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ

Programowanie w C++ - wybrane przykłady szablonów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ programowanie w C++ dla OWK Programowanie w C++ - wybrane przykłady szablonów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ 1 Streszczenie W tym rozdziale podamy kilka najprostszych przykładów programów

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

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

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

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

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

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 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

Języki programowania obiektowego Nieobiektowe elementy języka C++

Języki programowania obiektowego Nieobiektowe elementy języka C++ Języki programowania obiektowego Nieobiektowe elementy języka C++ Roman Simiński roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Przetwarzanie tablic znaków Łańcuchy znakowe jako tablice znaków

Bardziej szczegółowo

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami 1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.

Bardziej szczegółowo

ROZDZIAŁ 2. Operatory

ROZDZIAŁ 2. Operatory Bibliografia [1] Jerzy Grębosz, Symfonia C++, Oficyna Kallimach, Kraków, 1999, [2] Jerzy Grębosz, Pasja C++, Oficyna Kallimach, Kraków, 1999, [3] Bjarne Stroustrup, Język C++, WNT, Warszawa, 1997, [4]

Bardziej szczegółowo

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego

Bardziej szczegółowo

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java Cechy C++ Język ogólnego przeznaczenia Można programować obiektowo i strukturalnie Bardzo wysoka wydajność kodu wynikowego

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

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

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

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura Programowanie komputerów Programowanie obiektowe. Typy zmiennych proste i złożone Typy zmiennych "wbudowane", tj. identyfikowane przez słowa kluczowe, są określane jako proste: int short long float double

Bardziej szczegółowo

Wykład 9 2014-06-20 09:37 PP2_W9

Wykład 9 2014-06-20 09:37 PP2_W9 Wykład 9 Przykłady programów z wykorzystaniem klas - przykład funkcji operatorowych - obiektowa implementacja listy jednokierunkowej kopiowanie obiektów - klasa "latający napis" Pozycjonowanie w plikach

Bardziej szczegółowo