Wartości domyślne, przeciażenia funkcji

Podobne dokumenty
Wartości domyślne, przeciażenia funkcji

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji

Operacje wejścia/wyjścia odsłona pierwsza

Pola i metody statyczne

Wyliczanie wyrażenia obiekty tymczasowe

Referencje do zmiennych i obiektów

Lista dwukierunkowa - przykład implementacji destruktorów

Klasa, metody, rozwijanie w linii

Klasa, metody, rozwijanie w linii

Konstruktor kopiujacy

Szablon klasy std::vector

Przesłanianie nazw, przestrzenie nazw

Szablon klasy std::list

Operacje wejścia/wyjścia (odsłona druga) - pliki

Style programowania - krótki przeglad

Obiekty i metody stałe

Geneza powstania języka C++

Wprowadzenie do szablonów klas

Geneza powstania języka C++

Rzutowanie i konwersje

Qt sygnały i sloty. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska

Podejście obiektowe - podstawowe pojęcia

Szablony funkcji i szablony klas

Aplikacja po polsku. Bogdan Kreczmer. ZPCiR ICT PWr pokój 307 budynek C3.

Schemat konstrukcja pliku Makefile

Style programowania - krótki przeglad

Qt - edycja, obsługa zdarzeń, rozmieszczenie kontrolek

PARADYGMATY PROGRAMOWANIA Wykład 4

Qt - dialogi. Bogdan Kreczmer. ZPCiR ICT PWR pokój 307 budynek C3

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Wstęp do programowania

Podstawy Programowania Obiektowego

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

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

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

Klasa std::string. Bogdan Kreczmer. ZPCiR IIAiR PWr pokój 307 budynek C3.

Qt sygnały i designer

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

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

Przestrzenie nazw. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Tablice, funkcje - wprowadzenie

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

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

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

Języki i techniki programowania Ćwiczenia 2

Przykład implementacji przeciażeń operatorów problem kolizji

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

Qt - podstawowe cechy

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Tworzenie aplikacji rozproszonej w Sun RPC

Praca z aplikacją designer

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Przykłady oprogramowania wykorzystujacego Qt

Laboratorium nr 10. Temat: Funkcje cz.2.

Wykład 5: Klasy cz. 3

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

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

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )

Programowanie w języku C++

Przykład zastosowania przeciażeń operatorów i metod stałych - szukanie punktu przecięcia z wielobokiem

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

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

Zasoby, pliki graficzne

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory

PODEJŚCIE OBIEKTOWE. Przykład 1 metody i atrybuty statyczne

Podstawy programowania

Programowanie - wykład 4

/*W tym miejscu funkcja system wywołuje systemową komendę PAUSE tj.czeka tak długo, aż zostanie wciśnięty dowolny znak z

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

Wykład 3 Składnia języka C# (cz. 2)

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

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

Materiały do zajęć VII

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

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.

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

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

Programowanie Obiektowe i C++

Programowanie obiektowe 2005/2006. Laboratorium 1. Przeciążanie funkcji

Programowanie Obiektowew języku C++ Zadania L4

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

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

Programowanie proceduralne w języku C++ Funkcje

Weryfikatory, zasoby graficzne

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

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

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

Lab 9 Podstawy Programowania

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

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

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

Programowanie obiektowe. Wykład 5. C++: szablony

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Transkrypt:

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. Jest on udostępiony pod warunkiem wykorzystania wyłacznie do własnych prywatnych potrzeb i może on być kopiowany wyłacznie w całości, razem z niniejsza strona tytułowa.

void Funkcja A( int ip, float fp = 2.4, char const sp = Łańcuch znaków ) Funkcja A(2); // Funkcja A(2,2.4, Łańcuch znaków );

void Funkcja A( int ip, float fp = 2.4, char const sp = Łańcuch znaków ) Funkcja A(2); // Funkcja A(2,2.4, Łańcuch znaków ); Funkcja A(2, 9);

void Funkcja A( int ip, float fp = 2.4, char const sp = Łańcuch znaków ) Funkcja A(2); // Funkcja A(2,2.4, Łańcuch znaków ); Funkcja A(2, 9); // Funkcja A(2,9.0, Łańcuch znaków );

void Funkcja A( int ip, float fp = 2.4, char const sp = Łańcuch znaków ) Funkcja A(2); // Funkcja A(2,2.4, Łańcuch znaków ); Funkcja A(2, 9); // Funkcja A(2,9.0, Łańcuch znaków ); Funkcja A(2, Nowy łańcuch );

void Funkcja A( int ip, float fp = 2.4, char const sp = Łańcuch znaków ) Funkcja A(2); // Funkcja A(2,2.4, Łańcuch znaków ); Funkcja A(2, 9); // Funkcja A(2,9.0, Łańcuch znaków ); Funkcja A(2, Nowy łańcuch );

void Funkcja A( int ip, float fp = 2.4, char const sp = Łańcuch znaków ) Funkcja A(2); // Funkcja A(2,2.4, Łańcuch znaków ); Funkcja A(2, 9); // Funkcja A(2,9.0, Łańcuch znaków ); Funkcja A(2, Nowy łańcuch ); Funkcja A(2, 2.4, Inny łańcuch );

void Funkcja A( int ip, float fp = 2.4, char const sp = Łańcuch znaków ) Funkcja A(2); // Funkcja A(2,2.4, Łańcuch znaków ); Funkcja A(2, 9); // Funkcja A(2,9.0, Łańcuch znaków ); Funkcja A(2, Nowy łańcuch ); Funkcja A(2, 2.4, Inny łańcuch ); // Funkcja A(2,2.4, Inny łańcuch );

void Funkcja A( int ip, float fp = 2.4, char const sp = Łańcuch znaków ) Funkcja A(2); // Funkcja A(2,2.4, Łańcuch znaków ); Funkcja A(2, 9); // Funkcja A(2,9.0, Łańcuch znaków ); Funkcja A(2, Nowy łańcuch ); Funkcja A(2, 2.4, Inny łańcuch ); // Funkcja A(2,2.4, Inny łańcuch ); Definiowanie wartości domyślnych pozwala pominać wybrany parametr przy wywołaniu. Jednak zaniechanie odwołania się do tego parametru musi dotyczyć również wszystkich pozostałych występujacych po nim.

Czy definiowanie wartości domyślnych jest możliwe w dowolnym porzadku? np. void Funkcja B( double dp = 4, int ip, char const sp = Łańcuch znaków )

Czy definiowanie wartości domyślnych jest możliwe w dowolnym porzadku? np. void Funkcja B( double dp = 4, int ip, char const sp = Łańcuch znaków ) Jeżeli dla danego parametru zostanie zdefiniowana wartość domyślna, to dla wszystkich parametrów występujacych po nim również musza zostać zdefiniowane wartości domyślne.

Występowanie wartości domyślnych w zapowiedzi definicji funkcji. void Funkcja A( int ip, float fp = 2.4, char const sp = Łańcuch znaków ); void Funkcja A( int ip, float fp = 2.4, char const sp = Łańcuch znaków )

Występowanie wartości domyślnych w zapowiedzi definicji funkcji. void Funkcja A( int ip, float fp = 2.4, char const sp = Łańcuch znaków ); void Funkcja A( int ip, float fp = 2.4, char const sp = Łańcuch znaków ) Jeżeli występuje zapowiedź funkcji, to w przypadku zdefiniowania domyślnych wartości parametrów musza one zostać umieszczone w zapowiedzi definicji. Niedopuszczalne jest wówczas powtórne redefiniowanie tych wartości w samej definicji funkcji (choćby były to te same wartości).

Przeciażanie void Funkcja A( int ip ) void Funkcja A( int ip, float fp ) void Funkcja A( int ip, float fp, char const sp ) Funkcja A(2); Funkcja A(2, 9.0); Funkcja A(2, 2.4, Inny łańcuch ); Przeciażenia sa możliwe dzięki temu, że funkcje sa identyfikowane poprzez swoje nazwy i listę typów parametrów.

Przeciażanie void Funkcja A( int ip1, int ip2 ) void Funkcja A( int ip, float fp ) Funkcja A(2, 9); //Jaka zostanie tutaj wywołana funkcja?

Przeciażanie void Funkcja A( int ip1, int ip2 ) void Funkcja A( int ip, float fp ) Funkcja A(2, 9); Funkcja A(2, 9.0); //Jaka zostanie tutaj wywołana funkcja? //A jaka w tym miejscu?

Przeciażanie void Funkcja A( int ip1, int ip2 ) void Funkcja A( int ip, float fp ) Funkcja A(2, 9); Funkcja A(2, 9.0); Funkcja A(2, (float)9.0); //Jaka zostanie tutaj wywołana funkcja? //A jaka w tym miejscu? // To wywołanie jest poprawnym wywołaniem // drugiej z funkcji. Przeciażenia moga prowadzić do niejednoznaczności w przypadku, gdy dla danego typu aktualnego parametru wywołania funkcji istnieja domyślne konwersje dla obu typów argumentów, które sa podstawa rozróżnienia przeciażenia danej funkcji, np. dla wywołań powyżej dla typu double sa możliwe dwie konwersje, tzn. do typu intoraz do typu float (wartość 9.0 domyślnie traktowana jest jako wartość typu double).

Przeciażanie void Funkcja A( int ip ) void Funkcja A( int ip, float fp ) void Funkcja A( int ip, float fp = 2.4, char const sp = Pewien napis ) Funkcja A(2); Funkcja A(2, 9); Funkcja A(2, 9, Nowy napis ); Czy wszystko tu jest dobrze?

Przeciażanie void Funkcja A( int ip ) void Funkcja A( int ip, float fp ) void Funkcja A( int ip, float fp = 2.4, char const sp = Pewien napis ) Funkcja A(2); Funkcja A(2, 9); Funkcja A(2, 9, Nowy napis ); Wprowadzone w sposób nie przemyślany wartości domyślne parametrów moga prowadzić do niejednoznaczności tworzonych przeciażeń. kompilacji lub konsolidacji. Błędy te nie sa groźne, gdyż wykrywane sa na etapie

Przeciażanie Inny typ przeciażenia, ale czy tak można? void Funkcja A( int ip ) int Funkcja A( int ip )

Przeciażanie Inny typ przeciażenia, ale czy tak można? void Funkcja A( int ip ) int Funkcja A( int ip ) TAK NIE MOŻNA. Przeciażenia moga być dokonywane ze względu na listę parametrów funkcji. Typ zwracanej wartości nie może być podstawa do realizacji przeciażenia. Tego rodzaju błędy wykrywane sa na etapie kompilacji lub konsolidacji.

Pytania i ćwiczenia 1. Dane sa definicje funkcji: void Funkcja(int ip, char napis ) ip = 5; int Funkcja(int ip, char const napis ) return 0; Czy przedstawione powyżej przeciażenie jest poprawne? Jeśli tak, to która funkcja zostanie uruchomiona dla wywołania: Funkcja(9, napis )? Jeżeli nie, to jak należy zapisać to przeciażenie aby było poprawne? 2. Dane sa definicje funkcji: int funkcja( int i, char const s = ) return 2; int funkcja( double i, char const s = napis ) return 3; double funkcja( ) return 3; Czy wywołanie funkcja(funkcja(funkcja(funkcja()))) jest poprawne? Jeżeli tak, to napisz które po kolei funkcje sa wywoływane. Jeżeli nie, to jak należy zmienić powyższe definicje aby wywołanie takie było poprawne?