Programowanie obiektowe III rok EiT

Slides:



Advertisements
Podobne prezentacje
Tablice 1. Deklaracja tablicy
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
Język C/C++ Funkcje.
Programowanie obiektowe
Kurs języka C++ Paweł Rzechonek Instytut Informatyki
C++ Paweł Rzechonek Instytut Informatyki Uniwersytetu Wrocławskiego
Programowanie obiektowe
Programowanie obiektowe PO PO - LAB 4 Wojciech Pieprzyca.
Projektowanie bazy danych
Wprowadzenie.
dynamiczny przydział pamięci
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Praktyka Programowania Semestr I: –wykład - 1 godz. –laboratorium - 1 godz. –projekt - 1 godz.
Wskaźniki. Definiowanie wskaźników Wskaźnik może wskazywać na obiekt dowolnego typu. int * w; char * Wsk_Znak; float * Wskaz_Real; Przykłady: Wskaźnik.
Struktury.
C++ wykład 2 ( ) Klasy i obiekty.
Wykład 1: Wskaźniki Podstawy programowania Programowanie w C
Podstawy programowania PP – WYK3 Wojciech Pieprzyca.
Podstawy programowania PP – LAB4 Wojciech Pieprzyca.
Podstawy programowania PP – LAB5 Wojciech Pieprzyca.
Tablice tablica jest sekwencją elementów tego samego typu (prostego lub obiektowego) w Javie tablice są obiektami, a zmienne tablicowe przechowują referencję
nowe operatory & . (kropka) * operator rzutowy -> , (przecinek)
Podstawy programowania
Metody Programowania Wykład
Programowanie obiektowe III rok EiT
Podstawy informatyki (4)
Programowanie obiektowe III rok EiT
Jerzy F. Kotowski1 Informatyka I Wykład 9 TABLICE PREPROCESOR OPERATORY c.d. (nie tylko binarne)
Podstawy programowania
Wskaźnik może wskazywać na obiekt dowolnego typu. int * w; char * Wsk_Znak; float * Wskaz_Float; Przykład: Wskaźnik przechowuje adres obiektu wskazanego.
Podstawy programowania
Informatyka I Wykład 10 WSKAŹNIKI I ADRESY Jerzy F. Kotowski.
Jerzy F. Kotowski1 Informatyka I Wykład 11 STRUKTURY I UNIE.
Informatyka I - Wykład ANSI C
Podstawy Programowania
Podstawy programowania
Programowanie obiektowe III rok EiT
Jerzy F. Kotowski1 Informatyka I Wykład 8 STRUKTURA PROGRAMU n Funkcje n Klasy zmiennych n Projekt.
Programowanie obiektowe III rok EiT
Podstawy programowania w języku C i C++
Programowanie obiektowe III rok EiT dr inż. Jerzy Kotowski Wykład VIII.
Jerzy F. Kotowski1 Informatyka I Wykład 14 DEKLARATORY.
Jerzy F. Kotowski1 Informatyka I Wykład 15 PIERWSZE KROKI.
Programowanie obiektowe III rok EiT dr inż. Jerzy Kotowski Wykład XIII.
Programowanie obiektowe III rok EiT dr inż. Jerzy Kotowski Wykład IX.
Programowanie obiektowe III rok EiT
Programowanie obiektowe III rok EiT
STEROWANIE Ale nie tylko
Informatyka I Wykład 4 Stałe Stałe liczbowe Stałe znakowe Stałe tekstowe Jerzy Kotowski Politechnika Wroclawska var = 5L - 0xA; -5.
Inicjalizacja i sprzątanie
Jerzy Kotowski Politechnika Wrocławska
Programowanie obiektowe
Programowanie obiektowe Wykład 7 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 Dariusz Wardowski.
Programowanie obiektowe – język C++
PWSZ Gniezno // codefly 2009 Łukasz Tomczak
Kurs języka C++ – wykład 9 ( )
Kurs języka C++ – organizacja zajęć ( )
Programowanie strukturalne i obiektowe C++
K URS JĘZYKA C++ – WYKŁAD 1 ( ) Łagodne wprowadzenie do języka C++
1 Uzupełnienie dot. przekazywania argumentów #include struct nowa { int f; char line[20000]; int k; } reprezentant; int main() { void funkcja7( struct.
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
K URS JĘZYKA C++ – ORGANIZACJA ZAJĘĆ ( ) Paweł Rzechonek Instytut Informatyki Uniwersytetu Wrocławskiego.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
Patryk Jasik pok. 415 GB Języki programowania Patryk Jasik pok. 415 GB
Kurs języka C++ – wykład 3 ( )
Kurs języka C++ – organizacja zajęć ( )
Programowanie Obiektowe – Wykład 2
Język C++ Typy Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego.
BYDGOSKI FESTIWAL NAUKI
Zapis prezentacji:

Programowanie obiektowe III rok EiT 2017-03-28 05:48:55 Programowanie obiektowe III rok EiT dr inż. Jerzy Kotowski Wykład VI

Program wykładu Klasówka Źródła podejścia obiektowego Podstawy metody PRINCE -PRojects In Controlled Environment Podstawy metody LFA -Logical Framework Approach, składanie wniosków o grant Język C++ - gadżety języka, polimorfizm, klasy, dziedziczenie Elementy składni: Deklaratory złożone Przykład problemu Podstawy języka JAVA Klasówka

Literatura C++ for C programmers, Ira Pohl, The Benjamin/Cummings Publishing Company, Inc. Symfonia C++, Jerzy Grębosz, Oficyna Kallimach, Kraków 1999 Język ANSI C, Brian W. Kernigham, Dennis M. Ritchie, WNT 1994.

Elementy języka C i C++ - deklaratory Język C pozwala na deklarowanie obiektów typu podstawowego tablic obiektów wskaźników do obiektów oraz funkcji zwracających obiekty Do modyfikowania identyfikatorów służą modyfikatory. Język C ma trzy modyfikatory (C++ ma cztery): * [] () & W deklaratorach można używać nawiasów w celu wymuszenia interesującej nas kolejności interpretacji poszczególnych modyfikatorów. Każdy kompletny deklarator musi zawierać specyfikator typu. Deklaratory z jednym modyfikatorem: int *Ala; char Ela[10]; struct complex Ola(void); int Ula[20], &last=Ula[19];

Elementy języka C i C++ - deklaratory c.d. Deklarator złożony to taki, który zawiera więcej niż jeden modyfikator. Ograniczenia języka C i C++ Elementami tablicy nie mogą być funkcje Funkcja nie może zwracać tablicy Funkcja nie może zwracać funkcji Priorytety modyfikatorów [] oraz () mają wyższy priorytet niż * [] oraz () mają względem siebie identyczny priorytet i są interpretowane w kolejności od lewej strony do prawej

Deklaratory – natychmiastowe konsekwencje int *Ala[10]; Ala jest 10-elementową tablicą wskaźników do liczb typu int int (*Ala)[10]; Ala jest wskaźnikiem do 10-elemetowej tablicy liczb typu int double *Ela(void); Ela jest funkcją bez argumentów zwracającą adres do liczb typu double double (*Ela)(void); Ela jest wskaźnikiem do funkcji bez argumentów zwracającej wartość typu double

Przykłady float Ola[5], *Ola1=Ola; // Wskaźnik Ola1 ustawiamy na adres do Ola double Ola[5][10], *Ola1[5], (*Ola2)[10]; for(int i=0;i<5;i++) Ola1[i]=Ola[i]; Ola2=Ola; Tablica 2-wymiarowa, tablicę wskaźników i wskaźnik do tablicy jednowymiarowej Elementy tablicy adresów ustawiamy początki kolejnych wierszy tablicy dwuwymiarowej: *Ola[i]==*(Ola[i]+0)=Ola[i][0] Ola[i] jest adresem do początkowego elementu w i-tym wierszu Ola[i]+j i Ola1[i]+j jest adresem do j-tego elementu w i-tym wierszu Wniosek: Ola[i][j]==Ola1[i][j] Arytmetyka wskaźnika Ola2: Ola2+1 zwiększa wskazanie jak zawsze o jeden obiekt a jest nim w tym przypadku 10 liczb typu double Wniosek: Ola[i][j]==Ola2[i][j] Czyli to samo. double **Ola3 = Ola1. Czyli jak zawsze nazwa tablicy jest adresem do jej początkowego elementu. Ola3 jest wskaźnikiem do tablicy wskaźników.

Przykłady c.d. double (*f)(double); f=sin; f jest wskaźnikiem do funkcji z jednym argumentem typu double i zwracającej wartość typu double f=sin; Nazwa funkcji jest stałym adresem podobnie jak nazwa tablicy Użycie: double y=(*f)(x); Nawiasy są niezbędne: y=*f(x) Teraz do y podstawiamy dereferencję spod adresu zwróconego przez funkcję f wywołaną z argumentem x. To może nie mieć sensu.

Interpretowanie deklaratorów złożonych Idea: from the inside out. Algorytm interpretowania deklaratorów złożonych Krok 1 Znaleźć identyfikator lub miejsce gdzie powinien on być Krok 2 Zinterpretować znaczenie modyfikatorów [] i () po prawej stronie (jeżeli takie są) Krok 3 Zinterpretować znaczenie modyfikatora * po lewej stronie Krok 4 Jeżeli przy przesuwaniu się w prawo natrafi się na prawy nawias “)“ to wtedy należy znaleźć lewy nawias “(“ od tej pary nawiasów i zinterpretować wszystko, co znajduje się wewnątrz (tej pary nawiasów) zgodnie z regułami z Kroku 2 i Kroku 3. Krok 5 Zakończyć na specyfikatorze typu.

char *(*(*var)())[10]; Prosty przykład 1 7 6 4 2 1 3 5 1 var jest 2 wskaźnikiem do 3 funkcji zwracającej 4 wskaźnik do 5 tablicy 10 elementów będących 6 wskaźnikami do 7 obiektów typu char.

char *(*(*var)())[10]; Własnymi słowami char *alfa[5][10]; Dwuwymiarowa tablica wskaźników do liczb typu char: char *alfa[5][10]; Wskaźnik, który może zapamiętać adres do takiej tablicy: char *(*beta)[10]; beta=alfa; Kompilator powinien to przeżyć Funkcja zwracająca adres takiego typu: char *(*gamma())[10]; Nasz deklarator: char *(*(*delta)())[10]; Powinno się udać: delta=gamma;

Prosty przykład 2 double f0(double x) { return x;} ..\..\Visual Studio Projects\test1\test1.sln double f0(double x) { return x;} double (*p_f[5])(double)={f0,sin,cos,log,exp}; Tablica adresów do funkcji we-wy typu double-double double kalkulator(double (*f)(double), double x) { return (*f)(x); } Użycie: y=kalkulator(sin,1); z=kalkulator(p_f[1],1); double kalkulator(double (**f)(double), int fi, double x) { return (*f[fi])(x); } Użycie: z=kalkulator(p_f,2,1);

ERROR!! Co to jest? long *var(long,long); var jest funkcją o dwóch argumentach typu long zwracającą adres do obiektu typu long long (*var)(long,long); var jest wskaźnikiem do funkcji o dwóch argumentach typu long zwracającej wartość typu long. Przykład użycia: long Ola(long x,long y){return x+y;} var=Ola; long y=(*var)(3,7); //y=10 complex (*var[5])(complex); var jest 5 elementową tablicą wskaźników do funkcji o jednym argumencie typu complex zwracających obiekt takiego samego typu. int *var[5](void); 5 elementowa tablica funkcji… ERROR!!

Słowo kluczowe typedef double (*Ola(double(*)[5]))[5]; Ola jest funkcją, której jedynym argumentem jest adres do 5 elementowej tablicy liczb typu double. Funkcja zwraca adres tego samego typu. Okropne! cośtamcośtam ident; - Deklaracja obiektu o nazwie ident. Ogólnie - dowolny deklarator (również złożony). typedef cośtamcośtam ident; - definicja typu obiektowego o nazwie ident. Nowa nazwa znanego tworu. P1: typedef unsigned char byte; byte x; // mniej pisania P2: typedef char String50[51]; String50 Ala[10]; // tablica dwuwymiarowa P3: typedef char *p_char; p_char Ela[10]; // tablica wskaźników P4: typedef double (*Ula)[5]; Ula Ola(Ula); // Dużo lepiej! Widać, że argument i zwracana wartość są obiektami tego samego typu.

Argumenty funkcji main int main(int argc, char *argv[]) Interpretacja argumentów argc - liczba argumentów, z którymi wywołano program *argv[] - adres do tablicy adresów. To samo co **argv Jeżeli argc jest różne od zera to te argumenty są dostępne jako zakończone znakiem ’\0’ napisy w elementach tablicy argv: argv[0], argv[1],…, argv[argc-1] argv[0] - nazwa użyta do wywołania programu argv[argc]==0 (NULL) - gwarancja standardu ANSI Chcemy napisać program, który wydrukuje na ekranie zawartość plików dyskowych o podanej nazwie. Przykład użycia: drukuj Ala.cpp Ala.h Ela1.cpp Ela2.cpp

Argumenty funkcji main – program // program drukuj.cpp void drukowanie(char *s) { ………………………………… } void main(int argc, char *argv[]) int i; for(i=1;i<argc;i++) drukowanie(argv[i]);