Techniki Programowania przeładowanie funkcji

Podobne dokumenty
Techniki Programowania wskaźniki 2

Techniki Programowania wskaźniki

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

Przeciążenie (przeładowanie nazw) funkcji

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

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

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

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

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

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

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

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

Program 14. #include <iostream> #include <ctime> using namespace std;

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

Przekazywanie argumentów wskaźniki

Wstęp do programowania

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

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

Podstawy programowania 1

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Podstawy programowania w języku C++

Podstawy programowania. Wykład: 6. Tablice statyczne. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Plik klasy. h deklaracje klas

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

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

Wskaznik. Przekazywanie wyniku funkcji przez return. Typy i zmienne wskaznikowe. Zmienna wskazywana. typ * nazwa_wkaznika

KURS C/C++ WYKŁAD 8. Deklaracja funkcji informuje komplilator jaką wartość funkcja będzie zwracała i jakiego typu są jej argumenty.

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Wstęp do programowania obiektowego, wykład 7

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Programowanie Obiektowew języku C++ Zadania L4

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

Szablony. Szablony funkcji

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

Projektowanie klas c.d. Projektowanie klas przykład

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

Część 4 życie programu

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Wstęp do informatyki- wykład 11 Funkcje

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Struktury Struktura polami struct struct struct struct

Wstęp do informatyki- wykład 9 Funkcje

Wprowadzenie do szablonów klas

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

Programowanie Procedurale

Programowanie proceduralne w języku C++ Funkcje

Zajęcia 4 procedury i funkcje

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

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

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

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

Wstęp do programowania

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

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

Materiał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji

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

TEMAT : KLASY DZIEDZICZENIE

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

Obsługa wyjątków. Język C++ WW12

Wstęp do programowania 1

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

Funkcje i klasy zaprzyjaźnione

Techniki Programowania

Pola i metody statyczne

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Programowanie - wykład 4

TEMAT : KLASY POLIMORFIZM

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

Lab 9 Podstawy Programowania

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

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

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

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

C-struktury wykład. Dorota Pylak

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

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

Języki i metodyka programowania. Wskaźniki i tablice.

PARADYGMATY PROGRAMOWANIA Wykład 2

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

Podstawy Programowania

KURS C/C++ WYKŁAD 6. Wskaźniki

Programowanie komputerowe. Zajęcia 3

Podstawy programowania w języku C++ Zadania - dziedziczenie i polimorfizm

Podstawy programowania w języku C++

Laboratorium nr 10. Temat: Funkcje cz.2.

Tablice, funkcje - wprowadzenie

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

C-struktury wykład. Dorota Pylak

część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia

Szablony funkcji i szablony klas

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Programowanie w języku C++

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

Wstęp do informatyki- wykład 9 Pętla while, do while,for -pętla w pętli- przykłady Funkcje

Programowanie Obiektowe i C++

Transkrypt:

Techniki Programowania przeładowanie funkcji Łukasz Madej Katedra Informatyki Stosowanej i Modelowania Wykłady opracowane we współpracy z Danutą Szeligą, Łukaszem Sztangretem

Przeładownie nazwy funkcji polega na tym, że w danym zakresie ważności jest więcej niż jedna funkcja o takiej samej nazwie. To, która z nich zostaje w danym przypadku uaktywniona, zależy od liczby i typu argumentów wywołania jej. 1 1 Grębosz J., Symfonia C++ standard

Wybór funkcji do przeładowania Warto rozważyć przeładowanie deklaracji funkcji gdy: funkcje posiadają pewną cechę wspólną a mają działać na obiektach różnych typów int wypiszwynik( const jakas_klasa & A); int wypiszwynik( const double A[], unsigned int size); funkcje w sensie abstrakcyjnym wykonują analogiczną czynność, która w języku naturalnym ma tę samą nazwę double potega( double x, double y); double potega( int x, int y); I odwrotnie: nie przeładowywać deklaracji, jeśli nie potrzebujemy tej samej nazwy dla różnych działań

Lista argumentów przy przeładowaniu Dwie funkcje mają różną listę argumentów gdy: Funkcje posiadają różną liczbę argumentów Funkcje posiadają różne typy argumentów (na tych samych pozycjach) Funkcje posiadają różną kolejność argumentów Typ zwracany przez przeładowaną funkcję nie jest brany pod uwagę! Definicje funkcji o takiej samej nazwie i które nie spełniają powyższych wymagań są wzajemnie niejednoznaczne

Różna liczba argunemtów void napis(int a)cout<<"1 x int\n"; void napis(int a, int b)cout<<"2 x int\n"; void napis(int a, int b, int c)cout<<"3 x int\n"; napis(1); napis(1,2); napis(1,2,3);

Różne typy argumentów void napis(int a)cout<<"int\n"; void napis(double a)cout<<"double\n"; void napis(char a)cout<<"char\n"; napis(1); napis(1.5); napis('a'); napis(int (1.5));

Różna kolejność argumentów void napis(int a, double b)cout<<"int, double\n"; void napis(double b, int a)cout<<"double, int\n"; napis(1,1.5); napis(1.5,1);

Różne typy funkcji BŁĄD cout<<zrwoc(1.5); int zwroc(double a)return int(a); double zwroc(double a)return a; int a=zwroc(1.5); double b=zwroc(1.5);

typedef typedef int calkowity; void napis(int a)cout<<"int\n"; void napis(calkowity a)cout<<"calkowity\n"; int a=1; calkowity b=1; napis(a); napis(b); BŁĄD calkowity to inna nazwa int

enum enum litera a=1,b,c,d; void napis(int a)cout<<"int: "<<a<<endl"; void napis(litera l)cout<<"litera: <<l<<endl; litera l=d; int i=1; 4 napis(l); napis(i); 1 system("pause");

Tablica i wskaźnik void napis(int a[])cout<<"tablica\n"; void napis(int *a)cout<<"wkaznik\n"; int tab[]=1,2,3; napis(tab); BŁĄD int [] -> int * - trywialna konwersja

Tablice wielowymiarowe void napis(int a[2][3])cout<<"tablica 2x3\n"; void napis(int a[3][4])cout<<"tablica 3x4\n"; int tab1[2][3]=1,2,3,4,5,6; int tab2[3][4]=1,2,3,4,5,6,7,8,9,10,11,12; napis(tab1); tablica 2x3 napis(tab2); tablica 3x4

Tablice wielowymiarowe void napis(int a[2][3])cout<<"tablica 2x3\n"; void napis(int a[3][3])cout<<"tablica 3x3\n"; int tab1[2][3]=1,2,3,4,5,6; int tab2[3][3]=1,2,3,4,5,6,7,8,9; napis(tab1); napis(tab2); BŁĄD Pierwszy rozmiar tablicy nie jest brany pod uwagę int [][3]

Referencja void napis(int a)cout<<"wartosc\n"; void napis(int &a)cout<<"referencja\n"; int a=1; napis(a); BŁĄD Identyczne wywołanie funkcji

Typy: T, const T, volatile T void napis(int a)cout<<"int\n"; void napis(const int a)cout<<"const int\n"; void napis(volatile int a)cout<<"volatile int\n"; int a=1; napis(a); BŁĄD const oraz volatile mówią kompilatorowi TYLKO jak traktować zmienną wewnątrz funkcji

Typy: T*, const T*, volatile T* void napis(int *a)cout<<"int*\n"; void napis(const int *a)cout<<"const int*\n"; void napis(volatile int *a)cout<<"volatile int*\n"; int a=1; const int b=2; volatile int c=3; napis(&a); napis(&b); napis(&c); int* const int* voltaile int*

Wskaźnik do przeładowanej funkcji void napis(int a)cout<<"int\n"; void napis(double a)cout<<"double\n"; void napis(char a)cout<<"char\n"; void (*wsk1)(int)=napis; void (*wsk2)(double)=napis; void (*wsk3)(char)=napis; wsk1(1); wsk2(1.5); wsk3('a'); int double char

Konwersje kilku argumentów void f(double a, int b)cout<<"double, int\n"; void f(int a, double b)cout<<"int, double\n"; f(1,2.3); f(1.2,3); f(1,2); BŁĄD Obie konwersje są takie same

Zasłanianie nazw BŁĄD int i=1; cout << i << endl; int i=2; cout << i << endl; cout << ::i << endl; cout << i << endl; int i=3; cout << i << endl; cout << ::i << endl; cout << i << endl; cout << ::i << endl; //int i=4; system("pause"); 1 2 1 2 3 1 2 1

Co pojawi się na ekranie double promien; cout<<"podaj promień koła"<<endl; cin>>promien; //podajemy np. 1 oblicz_pole_kola(promien); system("pause"); void oblicz_pole_kola(double r) double pole; pole = 0.0; pole = 3.14*r*r; cout<<"obliczone pole kola to: "<<pole<<endl; Błąd brak deklaracji

void oblicz_pole_kola(double r); double promien, pole_kola; cout<<"podaj promień koła"<<endl; cin>>promien; //podajemy np. 1 pole_kola = oblicz_pole_kola(promien); cout<<"pole koła to: "<<pole_kola<<endl; system("pause"); void oblicz_pole_kola(double r) double pole; pole = 0.0; pole = 3.14*r*r; return pole; Błąd funkcja nic nie zwraca

int oblicz_pole_kola(double r); double promien, pole_kola; cout<<"podaj promień koła"<<endl; cin>>promien; //podajemy np. 1 pole_kola = oblicz_pole_kola(promien); cout<<"pole koła to: "<<pole_kola<<endl; system("pause"); int oblicz_pole_kola(double r) double pole; pole = 0.0; pole = 3.14*r*r; return pole; 3

void f(int x, double &y); int a=10; double b; b = 3.25; cout<<a<<" "<<b<<endl; f(a,b); cout<<a<<" "<<b<<endl; system("pause"); 10 3.25 10 6.25 void f(int x, double &y) x*=2; y +=3; cout<<x<<" "<<y<<endl; 20 6.25

Jeżeli wskaźnik pokazuje na element tablicy można użyć go zgodnie z notacją typową dla tablic: double tab[5] = -2,-1,0,1,2; double * ptr; ptr = &tab[0]; // lub: ptr = tab; for (int i = 0; i < 5; i++) cout << ptr[i] << ' ' << tab[i] << endl; -2,-1,0,1,2-2,-1,0,1,2

Wskaźnik taki można przesuwać po elementach tablicy: double tab[5] = -2,-1,0,1,2; ptr++; for (int i = 0; i < 4; i++) cout << *ptr << ' ' << tab[i] << endl; ptr++; -1,0,1,2-2,-1,0,1

int *fun() int *wsk=new int[5]; for (int i=0; i<5; i++) wsk[i]=i; return wsk; 0 1 2 3 4 int *w; w=fun(); for (int i=0; i<5; i++) cout << w[i] << endl; system("pause");

int tab[]=0,1,2,3,4; int *wsk1,*wsk2; wsk1=&tab[1]; wsk2=&tab[4]; cout << wsk2-wsk1 << endl; system("pause"); 3

int tab[5]=1,2,3,4,5; int *wsk; wsk=tab; for (int i=0;i<5;i++) cout<<*wsk<<"\t"<<wsk<<endl; wsk++;