Programowanie, część I
|
|
- Janina Rudnicka
- 6 lat temu
- Przeglądów:
Transkrypt
1 Programowanie, część I Rafał J. Wysocki Instytut Fizyki Teoretycznej, Wydział Fizyki UW 6 marca 2012 Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
2 Wstęp Informacje organizacyjne Kontakt tel ul. Hoża 69, pok. 142 Rafał J. Wysocki Programowanie, część I 6 marca / 118
3 Wstęp Materiał na ćwiczenia Materiał na ćwiczenia Język C++ klasy i dziedziczenie. Programowanie grafiki z użyciem biblioteki Qt. Algorytmy numeryczne w C++. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
4 Wstęp Plan wykładu Język C++ powtórzenie i standardowe klasy Podstawowe własności języka C++. Proste typy danych, operatory, wskaźniki, referencje. Klasy, przeciążanie operatorów, dziedziczenie, modyfikatory dostępu. Wirtualne metody, klasy abstrakcyjne i hierarchie klas. Szablony. Wyjątki. Klasy do obsługi wejścia-wyjścia. Klasa string. Biblioteka STL. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
5 Wstęp Plan wykładu Biblioteka Qt Struktura programu z oknami. Wątek obsługi zdarzeń, sygnały i sloty. Klasy z biblioteki Qt i ich powiązania. Tworzenie prostej grafiki. Konstruowanie graficznego interfejsu użytkownika (GUI). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
6 Wstęp Plan wykładu Algorytmy numeryczne Równania różniczkowe zwyczajne i metoda Rungego-Kutty. Równania liniowe eliminacja Gaussa i Gaussa-Jordana. Rozwiązywanie równań nieliniowych metodą Newtona. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
7 Język C++ powtórzenie Podstawowe własności C++ Jakim językiem programowania jest C++ Język wysokiego poziomu Kod źródłowy zapisywany w abstrakcyjnej formie. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
8 Język C++ powtórzenie Podstawowe własności C++ Jakim językiem programowania jest C++ Język wysokiego poziomu Kod źródłowy zapisywany w abstrakcyjnej formie. Język kompilowany Kod wykonywalny generowany na podstawie kodu źródłowego przez kompilator (ang. compiler). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
9 Język C++ powtórzenie Podstawowe własności C++ Jakim językiem programowania jest C++ Język wysokiego poziomu Kod źródłowy zapisywany w abstrakcyjnej formie. Język kompilowany Kod wykonywalny generowany na podstawie kodu źródłowego przez kompilator (ang. compiler). Natywny kod wykonywalny Kod wykonywalny składa się z rozkazów dla procesora, a zatem nie jest przenośny między różnymi architekturami komputerowymi. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
10 Język C++ powtórzenie Podstawowe własności C++ Jakim językiem programowania jest C++ Język wysokiego poziomu Kod źródłowy zapisywany w abstrakcyjnej formie. Język kompilowany Kod wykonywalny generowany na podstawie kodu źródłowego przez kompilator (ang. compiler). Natywny kod wykonywalny Kod wykonywalny składa się z rozkazów dla procesora, a zatem nie jest przenośny między różnymi architekturami komputerowymi. Wywodzi się od języka C Jest nazywany nadzbiorem (ang. superset) języka C. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
11 Język C++ powtórzenie Podstawowe własności C++ Struktura kodu źródłowego w C++ Musi zawierać co najmniej jendą funkcję (ang. function) Wykonywanie programu zaczyna się od (skompilowanej) funkcji main(). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
12 Język C++ powtórzenie Podstawowe własności C++ Struktura kodu źródłowego w C++ Musi zawierać co najmniej jendą funkcję (ang. function) Wykonywanie programu zaczyna się od (skompilowanej) funkcji main(). Funkcje w C++ Każda funkcja składa się z nagłówka (ang. header) i treści (ang. body). Nagłówek określa typ zwracanego wyniku, nazwę i listę argumentów funkcji. Treść stanowi (abstrakcyjną) reprezentację pewnego ciągu rozkazów dla procesora. Jeżeli treść funkcji reprezentuje obliczenia, to wynik zwracany przez nią powinien reprezentować wynik tych obliczeń. Każda funkcja w kodzie źródłowym jest kompilowana oddzielnie. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
13 Język C++ powtórzenie Przykład funkcji w C++ Podstawowe własności C++ int main(int argc, char *argv[]) // Nagłówek. { // Treść. QApplication app(argc, argv); QLabel hello("hello world!"); hello.resize(100, 30); } hello.show(); return app.exec(); Ta funkcja ma nazwę main, zwraca wynik typu int i ma dwa argumenty, argc typu int oraz argv, który jest tablicą wskaźników (char jest typem danych dla zmiennych wskazywanych przez nie). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
14 Język C++ powtórzenie Podstawowe własności C++ Instrukcje w C++ Instrukcja (ang. statememt) Najprostszy możliwy do skompilowania zapis w treści funkcji. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
15 Instrukcje w C++ Język C++ powtórzenie Podstawowe własności C++ Instrukcja (ang. statememt) Najprostszy możliwy do skompilowania zapis w treści funkcji. Podstawowe rodzaje instrukcji w C++ 1 Przypisanie (ang. assignment): symbol =. 2 Modyfikacja: symbole +=, -=,..., ++, Sterujące: Pętle (while, for, do/while). Przerwanie (break) i kontynuacja (continue). Skok (goto). 4 Warunkowe (if, if/else) i wyboru (switch). 5 Obsługa wyjątków (try, catch). 6 Wywołanie funkcji (ang. function call). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
16 Język C++ powtórzenie Podstawowe własności C++ Bloki w C++ W C++ pojedynczą instrukcję można zastąpić blokiem (ang. block) Blok zaczyna się otwierającym nawiasem klamrowym { i kończy się zamykającym nawiasem klamrowym }. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
17 Język C++ powtórzenie Podstawowe własności C++ Bloki w C++ W C++ pojedynczą instrukcję można zastąpić blokiem (ang. block) Blok zaczyna się otwierającym nawiasem klamrowym { i kończy się zamykającym nawiasem klamrowym }. for (i = 1; i <= N; i++) cout << i << endl; for (i = 1; i <= N; i++) { suma += i; cout << suma << endl; } Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
18 Język C++ powtórzenie Podstawowe własności C++ Bloki w C++ W C++ pojedynczą instrukcję można zastąpić blokiem (ang. block) Blok zaczyna się otwierającym nawiasem klamrowym { i kończy się zamykającym nawiasem klamrowym }. for (i = 1; i <= N; i++) cout << i << endl; for (i = 1; i <= N; i++) { suma += i; cout << suma << endl; } Poza instrukcjami blok może zawierać deklaracje zmiennych lub stałych. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
19 Język C++ powtórzenie Zmienne i typy danych w C++ Zmienne w C++ Zmienna (ang. variable) Symbol reprezentujący pewną wartość, która może zmieniać się w trakcie wykonywania programu przez procesor. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
20 Język C++ powtórzenie Zmienne i typy danych w C++ Zmienne w C++ Zmienna (ang. variable) Symbol reprezentujący pewną wartość, która może zmieniać się w trakcie wykonywania programu przez procesor. C++ jest językiem wymuszającym sztywne reguły stosowania typów danych (ang. strong typing). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
21 Język C++ powtórzenie Zmienne i typy danych w C++ Zmienne w C++ Zmienna (ang. variable) Symbol reprezentujący pewną wartość, która może zmieniać się w trakcie wykonywania programu przez procesor. C++ jest językiem wymuszającym sztywne reguły stosowania typów danych (ang. strong typing). Deklaracje zmiennych Każda zmienna w C++ musi być zadeklarowana zanim zostanie użyta po raz pierwszy. W deklaracji zmiennej należy podać jej nazwę (ang. name) oraz typ danych (ang. data type). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
22 Język C++ powtórzenie Zmienne i typy danych w C++ Zmienne w C++ Zmienna (ang. variable) Symbol reprezentujący pewną wartość, która może zmieniać się w trakcie wykonywania programu przez procesor. C++ jest językiem wymuszającym sztywne reguły stosowania typów danych (ang. strong typing). Deklaracje zmiennych Każda zmienna w C++ musi być zadeklarowana zanim zostanie użyta po raz pierwszy. W deklaracji zmiennej należy podać jej nazwę (ang. name) oraz typ danych (ang. data type). Typy danych są to zbiory wartości, jakie mogą być reprezentowane przez zmienne (tzn. jakie mogą być nadawane zmiennym). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
23 Język C++ powtórzenie Fizyczna reprezentacja zmiennych Zmienne i typy danych w C++ W czasie wykonywania programu przez procesor zmienne są utożsamiane z określonymi obszarami pamięci (o znanych adresach), zawierającymi wzory bitowe (ang. bit pattern) o ustalonej długości i dobrze zdefiniowanej interpretacji. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
24 Język C++ powtórzenie Fizyczna reprezentacja zmiennych Zmienne i typy danych w C++ W czasie wykonywania programu przez procesor zmienne są utożsamiane z określonymi obszarami pamięci (o znanych adresach), zawierającymi wzory bitowe (ang. bit pattern) o ustalonej długości i dobrze zdefiniowanej interpretacji. Długości tych wzorów bitowych (rozmiary zmiennych) oraz ich interpretacja są wyznaczane przez typy danych przypisane tym zmiennym. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
25 Język C++ powtórzenie Fizyczna reprezentacja zmiennych Zmienne i typy danych w C++ W czasie wykonywania programu przez procesor zmienne są utożsamiane z określonymi obszarami pamięci (o znanych adresach), zawierającymi wzory bitowe (ang. bit pattern) o ustalonej długości i dobrze zdefiniowanej interpretacji. Długości tych wzorów bitowych (rozmiary zmiennych) oraz ich interpretacja są wyznaczane przez typy danych przypisane tym zmiennym. Każda wartość należąca do typu danych przypisanego zmiennej musi być reprezentowana przez jeden z takich wzorów bitowych (niektóre wartości mogą być reprezentowane przez dwa wzory bitowe lub większą ich liczbę). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
26 Typy danych w C++ Język C++ powtórzenie Zmienne i typy danych w C++ W C++ każda wartość będąca wynikiem obliczeń lub wykorzystywana w obliczeniach zawsze ma określony typ danych. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
27 Typy danych w C++ Język C++ powtórzenie Zmienne i typy danych w C++ W C++ każda wartość będąca wynikiem obliczeń lub wykorzystywana w obliczeniach zawsze ma określony typ danych. W C++ obliczenia zawsze są przeprowadzane na wartościach tego samego typu. Mogą one pochodzić od wartości innych typów, z których są otrzymywane na drodze rzutowania typów danych (ang. type casting). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
28 Język C++ powtórzenie Zmienne i typy danych w C++ Typy danych w C++ W C++ każda wartość będąca wynikiem obliczeń lub wykorzystywana w obliczeniach zawsze ma określony typ danych. W C++ obliczenia zawsze są przeprowadzane na wartościach tego samego typu. Mogą one pochodzić od wartości innych typów, z których są otrzymywane na drodze rzutowania typów danych (ang. type casting). Proste i złożone typy danych W C++ zdefiniowana jest pewna liczba prostych lub podstawowych (ang. fundamental) typów danych, z których można konstruować (dowolnie skomplikowane) złożone typy danych. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
29 Język C++ powtórzenie Zmienne i typy danych w C++ Proste typy danych w C++ Podstawowe 1 Numeryczne całkowite: Bezznakowe (unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long). Ze znakiem (char, short, int, long, long long). 2 Numeryczne zmiennoprzecikowe (float, double, long double). 3 Boole owski (bool). 4 Poszerzony znakowy (wchar_t) (ang. wide character). Wskaźnikowe (ang. pointer) Czyste adresy (void *). Związane z typami podstawowymi (np. (char *), (int *) itd.). Związane z typami złożonymi. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
30 Język C++ powtórzenie Zmienne i typy danych w C++ Automatyczne rzutowanie typów danych numeryczne 1 char 2 unsigned char 3 short int 4 unsigned short int 5 int 6 unsigned int 7 long int 8 unsigned long int 9 long long int 10 unsigned long long int 11 float 12 double 13 long double Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
31 Język C++ powtórzenie Zmienne i typy danych w C++ Rzutowanie typów danych na bool Zasada 0 = false dla numerycznych typów danych Wartość typu bool zawsze może być zastąpiona przez wartość o numerycznym typie danych, która jest automatycznie rzutowana na typ bool. Wynikiem tego rzutowania jest wartość false, jeżeli rzutowaną numeryczną wartością jest 0. W przeciwnym wypadku wynikiem tego rzutowania jest wartość true. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
32 Język C++ powtórzenie Zmienne i typy danych w C++ Rzutowanie typów danych na bool Zasada 0 = false dla numerycznych typów danych Wartość typu bool zawsze może być zastąpiona przez wartość o numerycznym typie danych, która jest automatycznie rzutowana na typ bool. Wynikiem tego rzutowania jest wartość false, jeżeli rzutowaną numeryczną wartością jest 0. W przeciwnym wypadku wynikiem tego rzutowania jest wartość true. Zasada NULL = false dla wskaźników Jest analogiczna do powyższej, tylko wynikiem rzutowania jest true dla wszystkich wartości wskaźnikowych oprócz NULL (czyli zera ). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
33 Wyrażenia w C++ Język C++ powtórzenie Wyrażenia i operatory w C++ Wyrażenia są fragmentami kodu źródłowego reprezentującymi obliczenia. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
34 Wyrażenia w C++ Język C++ powtórzenie Wyrażenia i operatory w C++ Wyrażenia są fragmentami kodu źródłowego reprezentującymi obliczenia. Na ich podstawie kompilator tworzy ciągi rozkazów dla procesora, po wykonaniu których otrzymuje się określone wyniki (odpowiadające wynikom wyrażeń zapisanych w kodzie źródłowym). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
35 Wyrażenia w C++ Język C++ powtórzenie Wyrażenia i operatory w C++ Wyrażenia są fragmentami kodu źródłowego reprezentującymi obliczenia. Na ich podstawie kompilator tworzy ciągi rozkazów dla procesora, po wykonaniu których otrzymuje się określone wyniki (odpowiadające wynikom wyrażeń zapisanych w kodzie źródłowym). W wyrażeniach występują wartości, na podstawie których obliczany jest wynik oraz operatory, czyli symbole reprezentujące czynności do wykonania. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
36 Wyrażenia w C++ Język C++ powtórzenie Wyrażenia i operatory w C++ Wyrażenia są fragmentami kodu źródłowego reprezentującymi obliczenia. Na ich podstawie kompilator tworzy ciągi rozkazów dla procesora, po wykonaniu których otrzymuje się określone wyniki (odpowiadające wynikom wyrażeń zapisanych w kodzie źródłowym). W wyrażeniach występują wartości, na podstawie których obliczany jest wynik oraz operatory, czyli symbole reprezentujące czynności do wykonania. Wynik wyrażenia zawsze jest określonego typu, który zależy od typów wartości, na podstawie których został on obliczony. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
37 Język C++ powtórzenie Wyrażenia i operatory w C++ Operatory w C++ 1 Arytmetyczne (+, -, *, /, %). 2 Bitowe (ang. bit pattern) (, &, ^, ~, <<, >>). 3 Porównania (==,!=, <, >, <=, >=). 4 Logiczne (ang. boolean) (, &&,!). 5 Operator trójargumentowy (? :). 6 Wskaźnikowe (ang. pointer) (+, -, *, &, ->, []). 7 Wyboru składnika złożonego typu danych (.). 8 Inkrementacji i dekrementacji (++, --). 9 Rezerwowania i zwalniania pamięci (new, delete). 10 sizeof(). 11 Przypisania (=) i modyfikacji (+=, -=, *=,... ). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
38 Język C++ powtórzenie Wyrażenia i operatory w C++ Priorytety operatorów Priorytet (ang. priority) operatora Waga określająca w jakiej kolejności w stosunku do innych operacji w wyrażeniu będzie przeprowadzona operacja reprezentowana przez dany operator. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
39 Język C++ powtórzenie Wyrażenia i operatory w C++ Priorytety operatorów Priorytet (ang. priority) operatora Waga określająca w jakiej kolejności w stosunku do innych operacji w wyrażeniu będzie przeprowadzona operacja reprezentowana przez dany operator. Zasady 1 W pierwszej kolejności przeprowadzane są operacje reprezentowane przez operatory o najwyższych priorytetach. 2 Dla operatorów o jednakowych priorytetach kolejność przeprowadzania operacji nie jest jednoznacznie określona (najlepiej jest używać nawiasów w celu określenia jej). 3 Do wymuszania określonej kolejności operacji służą nawiasy okrągłe. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
40 Język C++ powtórzenie Wyrażenia i operatory w C++ Tabela priorytetów (siły wiązania) operatorów Siła wiązania (priorytet) operatorów w porządku malejącym! ~ - * / % + - << >> < <= >= > ==!= & ^ &&? : Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
41 Referencje i wskaźniki w C++ Przekazywanie danych do funkcji Rola funkcji (procedur) w programach Funkcje (procedury) służą do tego, aby kod, który jest (lub może być) wielokrotnie powtarzany w programie, można było zapisać tylko raz, a później odwoływać się do niego w określony sposób (z pomocą nazwy funkcji). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
42 Referencje i wskaźniki w C++ Przekazywanie danych do funkcji Rola funkcji (procedur) w programach Funkcje (procedury) służą do tego, aby kod, który jest (lub może być) wielokrotnie powtarzany w programie, można było zapisać tylko raz, a później odwoływać się do niego w określony sposób (z pomocą nazwy funkcji). Na ogół wygodnie jest używać funkcji (procedur) do logicznej separacji części kodu przeznaczonych do różnych zadań. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
43 Referencje i wskaźniki w C++ Przekazywanie danych do funkcji Rola funkcji (procedur) w programach Funkcje (procedury) służą do tego, aby kod, który jest (lub może być) wielokrotnie powtarzany w programie, można było zapisać tylko raz, a później odwoływać się do niego w określony sposób (z pomocą nazwy funkcji). Na ogół wygodnie jest używać funkcji (procedur) do logicznej separacji części kodu przeznaczonych do różnych zadań. Metody w klasach są specjalnym rodzajem funkcji. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
44 Referencje i wskaźniki w C++ Przekazywanie danych do funkcji Rola funkcji (procedur) w programach Funkcje (procedury) służą do tego, aby kod, który jest (lub może być) wielokrotnie powtarzany w programie, można było zapisać tylko raz, a później odwoływać się do niego w określony sposób (z pomocą nazwy funkcji). Na ogół wygodnie jest używać funkcji (procedur) do logicznej separacji części kodu przeznaczonych do różnych zadań. Metody w klasach są specjalnym rodzajem funkcji. Aby funkcje mogły spełniać swoje zadania, muszą operować na określonych danych, które trzeba przekazywać do kodu zapisanego w postaci funkcji. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
45 Referencje i wskaźniki w C++ Przykład dodawanie macierzy 2x2 Przekazywanie danych do funkcji class Matrix22 { public: double w1k1, w1k2, w2k1, w2k2; Matrix22(void): w1k1(0), w1k2(0), w2k1(0), w2k2(0) {} Matrix22(double r): w1k1(r), w1k2(0), w2k1(0), w2k2(r) {} Matrix22(double a, double b, double c, double d): w1k1(a), w1k2(b), w2k1(c), w2k2(d) {} double det(void) const { return w1k1*w2k2 - w1k2*w2k1; } Matrix22 operator +(Mattix22 m) { return Matrix22(w1k1 + m.w1k1, w1k2 + m.w1k2, w2k1 + m.w2k1, w2k2 + m.w2k2); } }; int main() { Matrix22 A(1), B(2), C; } C = A + B; cout << C.w1k1 << " " << C.w1k2 << " " << C.w2k1 << " " << C.w2k2 << endl; A = C + B; cout << A.w1k1 << " " << A.w1k2 << " " << A.w2k1 << " " << A.w2k2 << endl; B = A + C; cout << B.w1k1 << " " << B.w1k2 << " " << B.w2k1 << " " << B.w2k2 << endl; return 0; Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
46 Referencje i wskaźniki w C++ Przekazywanie danych do funkcji Przekazywanie argumentu przez wartość Aby uniknąć wielokrotnego powtarzania tego samego kodu wprowadzamy funkcję drukuj(): void drukuj(matrix22 M) { cout << M.w1k1 << " " << M.w1k2 << " " << M.w2k1 << " " << M.w2k2 << endl; } int main() { Matrix22 A(1), B(2), C; } C = A + B; drukuj(c); A = C + B; drukuj(a); B = A + C; drukuj(b); return 0; Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
47 Referencje i wskaźniki w C++ Przekazywanie danych do funkcji Przekazywanie argumentu przez wartość Aby uniknąć wielokrotnego powtarzania tego samego kodu wprowadzamy funkcję drukuj(): void drukuj(matrix22 M) { cout << M.w1k1 << " " << M.w1k2 << " " << M.w2k1 << " " << M.w2k2 << endl; } int main() { Matrix22 A(1), B(2), C; } C = A + B; drukuj(c); A = C + B; drukuj(a); B = A + C; drukuj(b); return 0; Przy każdym wywołaniu drukuj() tworzona jest kopia obiektu przekazywanego jako argument (używana w funkcji pod nazwą M). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
48 Referencje i wskaźniki w C++ Przekazywanie danych do funkcji Wady przekazywania argumentów funkcji przez wartość Każdym wywołanie funkcji drukuj() wymaga 1 zarezerwowania pamięci na 4 zmienne typu double, 2 przeprowadzenia operacji kopiowania 4 wartości typu double (poświęcamy czas). Ponosimy zatem koszty związane z użyciem funkcji. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
49 Referencje i wskaźniki w C++ Przekazywanie danych do funkcji Wady przekazywania argumentów funkcji przez wartość Każdym wywołanie funkcji drukuj() wymaga 1 zarezerwowania pamięci na 4 zmienne typu double, 2 przeprowadzenia operacji kopiowania 4 wartości typu double (poświęcamy czas). Ponosimy zatem koszty związane z użyciem funkcji. Koszty te nie byłyby ponoszone, gdyby można było powiedzieć funkcji, że ma posługiwać się tym samym obiektem, który jest przekazywany jako argument (bez kopiowania go). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
50 Referencje i wskaźniki w C++ Przekazywanie danych do funkcji Wady przekazywania argumentów funkcji przez wartość Każdym wywołanie funkcji drukuj() wymaga 1 zarezerwowania pamięci na 4 zmienne typu double, 2 przeprowadzenia operacji kopiowania 4 wartości typu double (poświęcamy czas). Ponosimy zatem koszty związane z użyciem funkcji. Koszty te nie byłyby ponoszone, gdyby można było powiedzieć funkcji, że ma posługiwać się tym samym obiektem, który jest przekazywany jako argument (bez kopiowania go). Do tego celu służą referencje (ang. reference). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
51 Referencje i wskaźniki w C++ Funkcje i referencje Przekazywanie argumentu przez referencję Aby uniknąć kopiowania obiektu przekazywanego jako argument do funkcji można użyć referencji: void drukuj(matrix22& M) { cout << M.w1k1 << " " << M.w1k2 << " " << M.w2k1 << " " << M.w2k2 << endl; } Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
52 Referencje i wskaźniki w C++ Funkcje i referencje Przekazywanie argumentu przez referencję Aby uniknąć kopiowania obiektu przekazywanego jako argument do funkcji można użyć referencji: void drukuj(matrix22& M) { cout << M.w1k1 << " " << M.w1k2 << " " << M.w2k1 << " " << M.w2k2 << endl; } Wtedy funkcja będzie używać tego samego obiektu, który został przekazany jako argument (bez kopiowania go), ale pod inną nazwą. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
53 Referencje i wskaźniki w C++ Funkcje i referencje Przekazywanie argumentu przez referencję Aby uniknąć kopiowania obiektu przekazywanego jako argument do funkcji można użyć referencji: void drukuj(matrix22& M) { cout << M.w1k1 << " " << M.w1k2 << " " << M.w2k1 << " " << M.w2k2 << endl; } Wtedy funkcja będzie używać tego samego obiektu, który został przekazany jako argument (bez kopiowania go), ale pod inną nazwą. Wówczas modyfikacje tego obiektu przez funkcję zostaną zachowane i będą widoczne po zakończeniu wykonywania jej. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
54 Referencje i wskaźniki w C++ Zwracanie referencji przez funkcje Funkcje i referencje Referencje mogą być zwracane przez funkcje (lub metody) jako wyniki. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
55 Referencje i wskaźniki w C++ Zwracanie referencji przez funkcje Funkcje i referencje Referencje mogą być zwracane przez funkcje (lub metody) jako wyniki. Coś takiego oznacza, że funkcja przekazuje kontrolę nad obiektem, którym posługiwała się, do funkcji wywołującej ją. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
56 Referencje i wskaźniki w C++ Zwracanie referencji przez funkcje Funkcje i referencje Referencje mogą być zwracane przez funkcje (lub metody) jako wyniki. Coś takiego oznacza, że funkcja przekazuje kontrolę nad obiektem, którym posługiwała się, do funkcji wywołującej ją. Ma to sens jedynie w przypadku obiektów, o których wiadomo, że będą istniały po zakończeniu wykonywania funkcji zwracających referencje do nich (tzn. nie wolno zwracać referencji do obiektów będących zmiennymi lokalnymi w funkcji zwracającej referencję do obiektu). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
57 Referencje i wskaźniki w C++ Zwracanie referencji przez funkcje Funkcje i referencje Referencje mogą być zwracane przez funkcje (lub metody) jako wyniki. Coś takiego oznacza, że funkcja przekazuje kontrolę nad obiektem, którym posługiwała się, do funkcji wywołującej ją. Ma to sens jedynie w przypadku obiektów, o których wiadomo, że będą istniały po zakończeniu wykonywania funkcji zwracających referencje do nich (tzn. nie wolno zwracać referencji do obiektów będących zmiennymi lokalnymi w funkcji zwracającej referencję do obiektu). ostream& drukuj(ostream& out, Matrix22& M) { out << M.w1k1 << " " << M.w1k2 << " " << M.w2k1 << " " << M.w2k2 << endl; return out; // Przekazanie kontroli nad (obiektem reprezentowanym przez) out z powrotem. } Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
58 Referencje i wskaźniki w C++ Funkcje i referencje Zwracanie referencji przez funkcje (c. d.) Zapis funkcji drukuj() z użyciem referencji pozwala na wykonanie następującej operacji bez kopiowania obiektów (najpierw drukowane są elementy macierzowe A, później B, a na końcu C): drukuj(drukuj(drukuj(cout, A), B), C); Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
59 Referencje i wskaźniki w C++ Funkcje i referencje Zwracanie referencji przez funkcje (c. d.) Zapis funkcji drukuj() z użyciem referencji pozwala na wykonanie następującej operacji bez kopiowania obiektów (najpierw drukowane są elementy macierzowe A, później B, a na końcu C): drukuj(drukuj(drukuj(cout, A), B), C); Można zapisać drukuj() w postaci operatora <<: ostream& operator <<(ostream& out, Matrix22& M) { return out << M.w1k1 << " " << M.w1k2 << " " << M.w2k1 << " " << M.w2k2 << endl; } Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
60 Referencje i wskaźniki w C++ Funkcje i referencje Zwracanie referencji przez funkcje (c. d.) Zapis funkcji drukuj() z użyciem referencji pozwala na wykonanie następującej operacji bez kopiowania obiektów (najpierw drukowane są elementy macierzowe A, później B, a na końcu C): drukuj(drukuj(drukuj(cout, A), B), C); Można zapisać drukuj() w postaci operatora <<: ostream& operator <<(ostream& out, Matrix22& M) { return out << M.w1k1 << " " << M.w1k2 << " " << M.w2k1 << " " << M.w2k2 << endl; } Wtedy drukowanie elementów macierzowych A, B i C (kolejno) można zapisać jako: cout << A << B << C; Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
61 Referencje i wskaźniki w C++ Funkcje i referencje Kiedy referencje sprawiają problemy Funkcja operator <<() z poprzedniego slajdu nie nadaje się do przeprowadzenia następującej operacji: cout << (A + B); Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
62 Referencje i wskaźniki w C++ Funkcje i referencje Kiedy referencje sprawiają problemy Funkcja operator <<() z poprzedniego slajdu nie nadaje się do przeprowadzenia następującej operacji: cout << (A + B); Jest tak dlatego, że metoda operator +() z klasy Matrix22 zwraca wynik przez wartość i wymaga skopiowania go do jakiegoś istniejącego obiektu (tzn. obiekt tworzony podczas wykonywania instrukcji return w tej metodzie istnieje tylko do czasu skopiowania go do innego obiektu). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
63 Referencje i wskaźniki w C++ Funkcje i referencje Kiedy referencje sprawiają problemy Funkcja operator <<() z poprzedniego slajdu nie nadaje się do przeprowadzenia następującej operacji: cout << (A + B); Jest tak dlatego, że metoda operator +() z klasy Matrix22 zwraca wynik przez wartość i wymaga skopiowania go do jakiegoś istniejącego obiektu (tzn. obiekt tworzony podczas wykonywania instrukcji return w tej metodzie istnieje tylko do czasu skopiowania go do innego obiektu). Rozwiązanie tego problemu wymaga przekazywania M do funkcji operator <<() przez wartość: ostream& operator <<(ostream& out, Matrix22 M) { return out << M.w1k1 << " " << M.w1k2 << " " << M.w2k1 << " " << M.w2k2 << endl; } Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
64 Referencje i wskaźniki w C++ Wskaźniki Do czego są potrzebne wskaźniki (w C++) W C++ wskaźniki (tzn. zmienne zawierające adresy innych zmiennych, np. obiektów) są głównie potrzebne do operowania zmiennymi tworzonymi na żądanie (dynamicznie) z pomocą new. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
65 Referencje i wskaźniki w C++ Wskaźniki Do czego są potrzebne wskaźniki (w C++) W C++ wskaźniki (tzn. zmienne zawierające adresy innych zmiennych, np. obiektów) są głównie potrzebne do operowania zmiennymi tworzonymi na żądanie (dynamicznie) z pomocą new. Zmienne tworzone na żądanie (z pomocą new) są anonimowe (tzn. nie mają nazw), więc ich położenie w pamięci jest znane tylko dzięki adresom przechowywanym we wskaźnikach. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
66 Referencje i wskaźniki w C++ Wskaźniki Do czego są potrzebne wskaźniki (w C++) W C++ wskaźniki (tzn. zmienne zawierające adresy innych zmiennych, np. obiektów) są głównie potrzebne do operowania zmiennymi tworzonymi na żądanie (dynamicznie) z pomocą new. Zmienne tworzone na żądanie (z pomocą new) są anonimowe (tzn. nie mają nazw), więc ich położenie w pamięci jest znane tylko dzięki adresom przechowywanym we wskaźnikach. Przypomnienie Wynik zwracany przez new jest adresem zmiennej (lub tablicy) utworzonej na żądanie (dynamicznie) lub ma wartość NULL (czyli 0), jeżeli zmienna nie mogła być utworzona. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
67 Wskazywane zmienne Referencje i wskaźniki w C++ Wskaźniki Jeżeli wsk jest wskaźnikiem, to *wsk oznacza referencję do zmiennej, której adres jest wartością wsk. Nazywana się ją zmienną wskazywaną przez wsk lub zmienną pod adresem wsk. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
68 Referencje i wskaźniki w C++ Wskaźniki Wskazywane zmienne Jeżeli wsk jest wskaźnikiem, to *wsk oznacza referencję do zmiennej, której adres jest wartością wsk. Nazywana się ją zmienną wskazywaną przez wsk lub zmienną pod adresem wsk. Jeżeli wsk jest wskaźnikiem, to *wsk może zastępować nazwę zmiennej we wszystkich sytuacjach, w których może ona być użyta, a w szczególności: po lewej stronie operatorów przypisania i modyfikacji, przy przekazywaniu argumentu do funkcji przez referencję, przy zwracaniu referencji przez funkcję. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
69 Referencje i wskaźniki w C++ Wskaźniki Wskazywane zmienne Jeżeli wsk jest wskaźnikiem, to *wsk oznacza referencję do zmiennej, której adres jest wartością wsk. Nazywana się ją zmienną wskazywaną przez wsk lub zmienną pod adresem wsk. Jeżeli wsk jest wskaźnikiem, to *wsk może zastępować nazwę zmiennej we wszystkich sytuacjach, w których może ona być użyta, a w szczególności: po lewej stronie operatorów przypisania i modyfikacji, przy przekazywaniu argumentu do funkcji przez referencję, przy zwracaniu referencji przez funkcję. Operator obliczania adresu & Dla zmiennej o nazwie var symbol &var oznacza adres tej zmiennej. Zatem *(&var) oznacza to samo, co var. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
70 Referencje i wskaźniki w C++ Wskaźnikowe typy danych Wskaźniki Wszystkie wskaźniki mają jednakowe rozmiary, ale przypisuje się im typy danych określające typy danych dla wskazywanych zmiennych. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
71 Referencje i wskaźniki w C++ Wskaźniki Wskaźnikowe typy danych Wszystkie wskaźniki mają jednakowe rozmiary, ale przypisuje się im typy danych określające typy danych dla wskazywanych zmiennych. Nazwa wskaźnikowego typu danych składa się z nazwy typu danych dla wskazywanych zmiennych i symblu * (rozdzielnych znakami przerwy), np.: (int *) wskazywane zmienne są typu int. (double *) wskazywane zmienne są typu double. (Matrix22 *) wskazywane zmienne są obiektami klasy Matrix22. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
72 Referencje i wskaźniki w C++ Wskaźnikowe typy danych Wskaźniki Wszystkie wskaźniki mają jednakowe rozmiary, ale przypisuje się im typy danych określające typy danych dla wskazywanych zmiennych. Nazwa wskaźnikowego typu danych składa się z nazwy typu danych dla wskazywanych zmiennych i symblu * (rozdzielnych znakami przerwy), np.: (int *) wskazywane zmienne są typu int. (double *) wskazywane zmienne są typu double. (Matrix22 *) wskazywane zmienne są obiektami klasy Matrix22. W deklaracjach wskaźników nazwy odpowiadających im typów danych występują bez nawiasów, np.: int *wsk; // Wskaźnik zawierający adresy zmiennych typu int. Matrix22 *ptr; // Wskaźnik zawierający adresy obiektów klasy Matrix22. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
73 Referencje i wskaźniki w C++ Wskaźniki Wskaźnikowe typy danych i wskazywane zmienne Dzięki wskaźnikowym typom danych wiadomo, co oznacza *wsk dla danego wskaźnika wsk. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
74 Referencje i wskaźniki w C++ Wskaźniki Wskaźnikowe typy danych i wskazywane zmienne Dzięki wskaźnikowym typom danych wiadomo, co oznacza *wsk dla danego wskaźnika wsk. *wsk Zmienna typu określonego przez typ danych wskaźnika wsk znajdująca się pod adresem będącym wartością wsk. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
75 Referencje i wskaźniki w C++ Wskaźniki Wskaźnikowe typy danych i wskazywane zmienne Dzięki wskaźnikowym typom danych wiadomo, co oznacza *wsk dla danego wskaźnika wsk. *wsk Zmienna typu określonego przez typ danych wskaźnika wsk znajdująca się pod adresem będącym wartością wsk. Operator -> Jeżeli zmienna wskazywana przez wskaźnik wsk jest obiektem (tzn. jej typ danych jest klasą), to operator -> pozwala na odwoływanie się do pól i wywoływanie metod w kontekście tej zmiennej, np.: Matrix22 *ptr; // Wskaźnik zawierający adresy obiektów klasy Matrix22. ptr = new Matrix22(1); ptr->w1k2 = -1; // Odwołanie do pola w1k2 obiektu wskazywanego przez ptr. cout << ptr->det(); // Wywołanie metody det() dla obiektu wskazywanego przez ptr. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
76 Referencje i wskaźniki w C++ Wskaźniki Stałe wskaźnikowe i czyste adresy Stałe wskaźnikowe Dla dowolnej zmiennej var wynik wyrażenia &var jest zawsze taki sam przez cały czas życia zmiennej, a zatem jest on stałą wskaźnikową. Podobnie stałą wskaźnikową jest nazwa tablicy jednowymiarowej (reprezentuje ona adres pierwszego elementu tablicy). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
77 Referencje i wskaźniki w C++ Wskaźniki Stałe wskaźnikowe i czyste adresy Stałe wskaźnikowe Dla dowolnej zmiennej var wynik wyrażenia &var jest zawsze taki sam przez cały czas życia zmiennej, a zatem jest on stałą wskaźnikową. Podobnie stałą wskaźnikową jest nazwa tablicy jednowymiarowej (reprezentuje ona adres pierwszego elementu tablicy). Czysty adres Adres miejsca w pamięci nie skojarzony z typem danych zmiennej. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
78 Referencje i wskaźniki w C++ Wskaźniki Stałe wskaźnikowe i czyste adresy Stałe wskaźnikowe Dla dowolnej zmiennej var wynik wyrażenia &var jest zawsze taki sam przez cały czas życia zmiennej, a zatem jest on stałą wskaźnikową. Podobnie stałą wskaźnikową jest nazwa tablicy jednowymiarowej (reprezentuje ona adres pierwszego elementu tablicy). Czysty adres Adres miejsca w pamięci nie skojarzony z typem danych zmiennej. (void *) Wskaźnikowy typ danych reprezentujący czyste adresy. Dla wskaźników tego typu operacje *wsk i wsk-> nie mają sensu. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
79 Wskaźniki i funkcje Referencje i wskaźniki w C++ Wskaźniki Wskaźniki mogą być argumentami funkcji, np.: void drukuj(matrix22 *M) { cout << M->w1k1 << " " << M->w1k2 << " " << M->w2k1 << " " << M->w2k2 << endl; } Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
80 Wskaźniki i funkcje Referencje i wskaźniki w C++ Wskaźniki Wskaźniki mogą być argumentami funkcji, np.: void drukuj(matrix22 *M) { cout << M->w1k1 << " " << M->w1k2 << " " << M->w2k1 << " " << M->w2k2 << endl; } W ten sposób unikamy kopiowania zmiennych przy przekazywaniu ich do funkcji (oszczędność czasu i miejca, podobnie jak przy posługiwaniu się referencjami). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
81 Wskaźniki i funkcje Referencje i wskaźniki w C++ Wskaźniki Wskaźniki mogą być argumentami funkcji, np.: void drukuj(matrix22 *M) { cout << M->w1k1 << " " << M->w1k2 << " " << M->w2k1 << " " << M->w2k2 << endl; } W ten sposób unikamy kopiowania zmiennych przy przekazywaniu ich do funkcji (oszczędność czasu i miejca, podobnie jak przy posługiwaniu się referencjami). Jednak w tym celu musimy znać adres zmiennej, którą funkcja ma posługiwać się lub obliczyć go, np.: Matrix22 *wsk; wsk = new Matrix22(1); drukuj(wsk); // Adres zmiennej jest wartością wsk. Matrix22 M(1); drukuj(&m); // Jawnie obliczamy adres M. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
82 Referencje i wskaźniki w C++ Wskaźniki Zgodność typów danych dla wskaźników Kompilator C++ ostrzega w przypadkach, w których wartość wskaźnikowa jest przypisywana wskaźnikowi o niewłaściwym typie danych, np.: double *wsk; wsk = double[100]; drukuj(wsk); // UWAGA! Oczekiwanym typem danych jest (Matrix22 *)! Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
83 Referencje i wskaźniki w C++ Wskaźniki Zgodność typów danych dla wskaźników Kompilator C++ ostrzega w przypadkach, w których wartość wskaźnikowa jest przypisywana wskaźnikowi o niewłaściwym typie danych, np.: double *wsk; wsk = double[100]; drukuj(wsk); // UWAGA! Oczekiwanym typem danych jest (Matrix22 *)! Można zastosować jawną konwersję typów danych w celu wskazania kompilatorowi, że wiemy co robimy, np.: drukuj((matrix22 *)wsk); Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
84 Referencje i wskaźniki w C++ Wskaźniki Zgodność typów danych dla wskaźników Kompilator C++ ostrzega w przypadkach, w których wartość wskaźnikowa jest przypisywana wskaźnikowi o niewłaściwym typie danych, np.: double *wsk; wsk = double[100]; drukuj(wsk); // UWAGA! Oczekiwanym typem danych jest (Matrix22 *)! Można zastosować jawną konwersję typów danych w celu wskazania kompilatorowi, że wiemy co robimy, np.: drukuj((matrix22 *)wsk); Jawna konwersja wskaźnikowych typów danych nie jest potrzebna, jeżeli docelowy wskaźnik jest typu (void *) lub przypisujemy czysty adres wskaźnikowi dowolnego typu. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
85 Referencje i wskaźniki w C++ Wskaźniki i referencje różnice Wskaźniki Wskaźniki są zmiennymi, a referencje nie mogą nimi być. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
86 Referencje i wskaźniki w C++ Wskaźniki i referencje różnice Wskaźniki Wskaźniki są zmiennymi, a referencje nie mogą nimi być. Użycie referencji oznacza przekazanie kontroli nad obiektem, natomiast wskaźnik określa położenie zmiennej (lub ogólnie czegoś) w pamięci. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
87 Referencje i wskaźniki w C++ Wskaźniki i referencje różnice Wskaźniki Wskaźniki są zmiennymi, a referencje nie mogą nimi być. Użycie referencji oznacza przekazanie kontroli nad obiektem, natomiast wskaźnik określa położenie zmiennej (lub ogólnie czegoś) w pamięci. Dlatego pola obiektów mogą być wskaźnikami (tzn. można stworzyć np. klasę, w której część pól będzie wskaźnikami), ale nie mogą być referencjami. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
88 Złożone typy danych w C++ Rola i rodzaje złożonych typów danych Pozwalają reprezentować złożone obiekty Pozwalają tworzyć zmienne, którymi można posługiwać się tak, jak gdyby były zespołami zmiennych o różnych prostych typach danych. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
89 Złożone typy danych w C++ Rola i rodzaje złożonych typów danych Pozwalają reprezentować złożone obiekty Pozwalają tworzyć zmienne, którymi można posługiwać się tak, jak gdyby były zespołami zmiennych o różnych prostych typach danych. Zmienne o złożonych typach danych często nazywane są obiektami (ang. object). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
90 Złożone typy danych w C++ Rola i rodzaje złożonych typów danych Pozwalają reprezentować złożone obiekty Pozwalają tworzyć zmienne, którymi można posługiwać się tak, jak gdyby były zespołami zmiennych o różnych prostych typach danych. Zmienne o złożonych typach danych często nazywane są obiektami (ang. object). Rodzaje złożonych typów danych w C++ Struktury (ang. structure) Unie (ang. union) Klasy (ang. class) Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
91 Złożone typy danych w C++ Struktury i unie Struktury Definicja struktury 1 Słowo kluczowe struct. 2 Nazwa struktury (identyfikator złożonego typu danych). 3 Otwierający nawias klamrowy. 4 Lista składników (ang. member) dla struktur są to wyłącznie pola (ang. field). 5 Zamykający nawias klamrowy. 6 (Opcjonalnie) lista nazw zmiennych (o tym typie danych). 7 Średnik. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
92 Złożone typy danych w C++ Struktury i unie Struktury Definicja struktury 1 Słowo kluczowe struct. 2 Nazwa struktury (identyfikator złożonego typu danych). 3 Otwierający nawias klamrowy. 4 Lista składników (ang. member) dla struktur są to wyłącznie pola (ang. field). 5 Zamykający nawias klamrowy. 6 (Opcjonalnie) lista nazw zmiennych (o tym typie danych). 7 Średnik. Składniki struktury deklaruje się tak, jak zmienne (bez wartości początkowych). Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
93 Złożone typy danych w C++ Struktury i unie Zmienne o typach danych będących strukturami Deklaracja zmiennej zawiera słowo kluczowe struct i nazwę struktury, które łącznie pełnią rolę typu danych dla zmiennej, np.: struct element zmienna; struct element *wsk; // Wskaźnik Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
94 Złożone typy danych w C++ Struktury i unie Zmienne o typach danych będących strukturami Deklaracja zmiennej zawiera słowo kluczowe struct i nazwę struktury, które łącznie pełnią rolę typu danych dla zmiennej, np.: struct element zmienna; struct element *wsk; // Wskaźnik Wykorzystanie pamięci 1 Zmienna o typie danych będącym strukturą zajmuje w pamięci co najmniej tyle miejsca, ile wynosi suma rozmiarów jej składników. 2 Składniki takiej zmiennej na ogół są rozmieszczane w pamięci zgodnie z kolejnością deklaracji i mogą być wyrównywane na granicy słowa o określonej długości (np. 32-bitowego). 3 Dwa składniki zmiennej mogą zajmować jedno słowo wspólnie. 4 sizeof() oblicza liczbę bajtów danych zajmowaną przez strukturę. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
95 Złożone typy danych w C++ Struktury i unie Bezpośrednie odwołania do pól struktury Kropka oddziela nazwę zmiennej o złożonym typie danych od nazwy składnika, do którego odnosi się operacja, np.: struct wektor { double x; double y; double z; } w; w.x = 1; cout << w.x << endl; Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
96 Złożone typy danych w C++ Struktury i unie Bezpośrednie odwołania do pól struktury Kropka oddziela nazwę zmiennej o złożonym typie danych od nazwy składnika, do którego odnosi się operacja, np.: struct wektor { double x; double y; double z; } w; w.x = 1; cout << w.x << endl; w.x pełni rolę zmiennej typu double. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
97 Złożone typy danych w C++ Struktury i unie Odwołania do pól struktury przez wskaźnik Symbol -> oznacza, że operacja ma odnosić się do pola o danej nazwie, będącego składnikiem zmiennej (o złożonym typie danych) wskazywanej przez wskaźnik, np.: struct wektor { double x; double y; double z; } w, *wsk; wsk = &w; wsk->x = 1; cout << wsk->x << endl; Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
98 Złożone typy danych w C++ Struktury i unie Odwołania do pól struktury przez wskaźnik Symbol -> oznacza, że operacja ma odnosić się do pola o danej nazwie, będącego składnikiem zmiennej (o złożonym typie danych) wskazywanej przez wskaźnik, np.: struct wektor { double x; double y; double z; } w, *wsk; wsk = &w; wsk->x = 1; cout << wsk->x << endl; wsk->x pełni rolę zmiennej typu double. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
99 Złożone typy danych w C++ Struktury i unie Początkowe wartości pól struktury struct wektor { double x; double y; double z; }; struct wektor w1 = { 1, 2, 3 }; struct wektor w2 = {.y = 0,.x = 1,.z = 2 }; struct wektor w3 = {.x = 1,.y = 2, }; Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
100 Złożone typy danych w C++ Struktury i unie Początkowe wartości pól struktury struct wektor { double x; double y; double z; }; struct wektor w1 = { 1, 2, 3 }; struct wektor w2 = {.y = 0,.x = 1,.z = 2 }; struct wektor w3 = {.x = 1,.y = 2, }; Pole z zmiennej w3 nie ma określonej wartości początkowej. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
101 Złożone typy danych w C++ Struktury i unie Definiowanie i używanie unii 1 Definicja unii wygląda tak samo, jak definicja struktury o identycznych polach, tylko zamiast słowa kluczowego struct używa się słowa kluczowego union. 2 Różnica polega na tym, że wszystkie pola unii znajdują się pod tym samym adresem w pamięci. 3 Stąd wynika, że pól unii używa się zamiennie. 4 Odwołania do pól unii zapisuje się tak samo, jak odwołania do pól struktury. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
102 Złożone typy danych w C++ Struktury i unie Definiowanie i używanie unii 1 Definicja unii wygląda tak samo, jak definicja struktury o identycznych polach, tylko zamiast słowa kluczowego struct używa się słowa kluczowego union. 2 Różnica polega na tym, że wszystkie pola unii znajdują się pod tym samym adresem w pamięci. 3 Stąd wynika, że pól unii używa się zamiennie. 4 Odwołania do pól unii zapisuje się tak samo, jak odwołania do pól struktury. Przykład union bajty { int n; unsigned char b[sizeof(int)]; }; Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
103 Złożone typy danych w C++ Struktury i unie Przykład użycia unii Drukowanie wartości bajtów składowych dla wartości typu int union bajty { int n; unsigned char b[sizeof(int)]; }; union bajty x; cout << "Podaj n: "; cin >> x.n; for (int i = 0; i < sizeof(int); i++) cout << "b[" << i << "] = 0x" << hex << (int)x.b[i] << endl; Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
104 Złożone typy danych w C++ Klasy Definiowanie klas 1 Słowo kluczowe class. 2 Nazwa klasy (litery, znak _ i cyfry oprócz pierwszego znaku). 3 Specyfikacja klas nadrzędnych (od których pochodzi ta klasa). 4 Lista składników (w nawiasie klamrowym). Pola typ danych i nazwa (jak dla struktur). Metody nagłówek (typ wyniku, nazwa, lista argumentów). Dla każdego składnika można określić zasady dostępu. Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
105 Definiowanie klas Złożone typy danych w C++ Klasy 1 Słowo kluczowe class. 2 Nazwa klasy (litery, znak _ i cyfry oprócz pierwszego znaku). 3 Specyfikacja klas nadrzędnych (od których pochodzi ta klasa). 4 Lista składników (w nawiasie klamrowym). Pola typ danych i nazwa (jak dla struktur). Metody nagłówek (typ wyniku, nazwa, lista argumentów). Dla każdego składnika można określić zasady dostępu. class Vector { public: // specyfikacja zasad dostępu double x, y; // pola double norm(void); // metoda double length(void); // metoda }; Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 6 marca / 118
Programowanie, część I
11 marca 2010 Kontakt Wstęp Informacje organizacyjne Materiał na ćwiczenia Plan wykładu http://www.fuw.edu.pl/~rwys/prog rwys@fuw.edu.pl tel. 22 55 32 263 Materiał na ćwiczenia Informacje organizacyjne
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
Programowanie, część I
Programowanie, część I Rafał J. Wysocki Instytut Fizyki Teoretycznej, Wydział Fizyki UW 22 lutego 2011 Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 22 lutego 2011 1 / 80 Wstęp Informacje organizacyjne
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
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
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ę
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
Wstęp do programowania, część II
Wstęp do programowania, część II Rafał J. Wysocki Instytut Fizyki Teoretycznej, Wydział Fizyki UW 8 listopada 2011 Rafał J. Wysocki (rwys@fuw.edu.pl) Wstęp do programowania, część II 8 listopada 2011 1
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
Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady
Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4 Dr inż. Dariusz JĘDRZEJCZYK Wskaźniki Dynamiczna alokacja pamięci Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Wskaźnik to
Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40
Programowanie w C++ Wykład 5 Katarzyna Grzelak 26 marca 2018 9 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Pojęcia z poprzedniego wykładu Podział programu na funkcje podział na niezależne
Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1
Typy złożone Struktury, pola bitowe i unie. Programowanie Proceduralne 1 Typy podstawowe Typy całkowite: char short int long Typy zmiennopozycyjne float double Modyfikatory : unsigned, signed Typ wskaźnikowy
Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016
Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,
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
Programowanie komputerowe. Zajęcia 4
Programowanie komputerowe Zajęcia 4 Typ logiczny Wartości logiczne są reprezentowane przez typ bool. Typ bool posiada tylko dwie wartości: true i false. Zamiast wartości logicznych można używać wartości
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
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
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
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
Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.
Podstawowe elementy proceduralne w C++ Program i wyjście Zmienne i arytmetyka Wskaźniki i tablice Testy i pętle Funkcje Pierwszy program // Niezbędne zaklęcia przygotowawcze ;-) #include using
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.
Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44
Programowanie w C++ Wykład 2 Katarzyna Grzelak 4 marca 2019 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Na poprzednim wykładzie podstawy C++ Każdy program w C++ musi mieć funkcję o nazwie main Wcięcia
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
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
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
Podstawy algorytmiki i programowania - wykład 4 C-struktury
1 Podstawy algorytmiki i programowania - wykład 4 C-struktury Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy
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
Struktury Struktura polami struct struct struct struct
Struktury Struktura jest zbiorem zmiennych występujących pod wspólna nazwą. Zmienne wchodzące w skład struktury nazywane są polami lub elementami, a czasem członkami struktury. Struktury używamy, jeśli
1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.
1. Pierwszy program // mój pierwszy program w C++ #include using namespace std; cout
Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27
Programowanie w C++ Wykład 5 Katarzyna Grzelak 16 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły
ZASADY PROGRAMOWANIA KOMPUTERÓW
POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.
ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje
Funkcje (podprogramy) Mianem funkcji określa się fragment kodu, który może być wykonywany wielokrotnie z różnych miejsc programu. Ogólny zapis: typ nazwa(argumenty) ciało funkcji typ określa typ danych
Języki i metodyka programowania. Wprowadzenie do języka C
Literatura: Brian W. Kernighan, Dennis M. Ritchie Język Ansi C, Wydawnictwa Naukowo - Techniczne, 2007 http://cm.bell-labs.com/cm/cs/cbook/index.html Scott E. Gimpel, Clovis L. Tondo Język Ansi C. Ćwiczenia
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
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ą
Wskaźniki. Informatyka
Materiały Wskaźniki Informatyka Wskaźnik z punktu widzenia programisty jest grupą komórek pamięci (rozmiar wskaźnika zależy od architektury procesora, najczęściej są to dwa lub cztery bajty ), które mogą
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
Wstęp do programowania obiektowego. Wykład 1 Algorytmy i paradygmaty Podstawowe pojęcia PO
Wstęp do programowania obiektowego Wykład 1 Algorytmy i paradygmaty Podstawowe pojęcia PO 1 Cele przedmiotu Zapoznanie z podstawowymi pojęciami oraz technikami programowania obiektowego na przykładzie
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,
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
KOTLIN. Język programowania dla Androida
KOTLIN Język programowania dla Androida Historia Kotlin został opracowany przez firmę JetBrains Prace rozpoczęto w 2011 r., od 2012 r. dostępny na licencji Apache 2. Nazwa pochodzi od wyspy koło Petersburga
C++ wprowadzanie zmiennych
C++ wprowadzanie zmiennych Każda zmienna musi być zadeklarowana, należy określić jej nazwę (identyfikator) oraz typ. Opis_typu lista zmiennych Dla każdej zmiennej rezerwowany jest fragment pamięci o określonym
Wstęp do programowania. Dariusz Wardecki, wyk. X
Wstęp do programowania Dariusz Wardecki, wyk. X Na czym polega przeciążanie operatorów Zamiast podawaê nazwí metody, moøna jπ oznaczyê z pomocπ symbolu operatora. Wtedy liczba argumentów metody zaleøy
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
Część 4 życie programu
1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część
Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład 6 Wskaźniki Krzysztof Banaś Podstawy programowania 1 Adresy zmiennych Język C pozwala na operowanie adresami w pamięci stąd, między innymi, kwalifikowanie C jako języka relatywnie
znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.
Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo
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
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
Programowanie Komputerów
Programowanie Komputerów Łukasz Kuszner pokój 209, WETI http://www.kaims.pl/ kuszner/ kuszner@eti.pg.gda.pl Wykład 30 godzin, Laboratoria 30 godzin 2012/ Strona 1 z 17 1. Typy i zmienne Jak wiemy, komputer
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,
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
4. Funkcje. Przykłady
4. Funkcje Przykłady 4.1. Napisz funkcję kwadrat, która przyjmuje jeden argument: długość boku kwadratu i zwraca pole jego powierzchni. Używając tej funkcji napisz program, który obliczy pole powierzchni
Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]
1. Typy. Java jest językiem programowania z silnym systemem kontroli typów. To oznacza, że każda zmienna, atrybut czy parametr ma zadeklarowany typ. Kompilator wylicza typy wszystkich wyrażeń w programie
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
Wstęp do wskaźników w języku ANSI C
Wstęp do wskaźników w języku ANSI C / Materiał dydaktyczny pomocniczy do przedmiotu Informatyka sem.iii kier. Elektrotechnika/ 1. Wprowadzenie W języku ANSI C dla każdego typu X (wbudowanego, pochodnego,
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
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
Wstęp do programowania, część I
Wstęp do programowania, część I Rafał J. Wysocki Instytut Fizyki Teoretycznej, Wydział Fizyki UW 12 października 2011 Rafał J. Wysocki (rwys@fuw.edu.pl) Wstęp do programowania, część I 12 października
Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.
M. Trzebiński C++ 1/14 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IVedycja,2016r. IFJ PAN Przygotowanie środowiska pracy Niniejsza
Podstawy Programowania Podstawowa składnia języka C++
Podstawy Programowania Podstawowa składnia języka C++ Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Szablon programu w C++ Najprostszy program w C++ ma postać: #include #include
/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>
Szablon programu: /* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include /* opcjonalne: deklaracja typów o rozmiarze jednego i dwóch
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
Składnia C++ Programowanie Obiektowe Mateusz Cicheński
Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Konstruktory i destruktory
C-struktury wykład. Dorota Pylak
C-struktury wykład Dorota Pylak C-struktury W języku C++, jak w każdym języku obiektowym, mamy możliwość definiowania własnych typów danych, wraz z określeniem operacji, jakie na tych danych można wykonywać.
Język C++ zajęcia nr 2
Język C++ zajęcia nr 2 Inicjalizacja Definiowanie obiektu może być połączone z nadaniem mu wartości początkowej za pomocą inicjalizatora, który umieszczany jest po deklaratorze obiektu. W języku C++ inicjalizator
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
Język C zajęcia nr 11. Funkcje
Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji
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
Podstawy programowania w języku C
Podstawy programowania w języku C WYKŁAD 1 Proces tworzenia i uruchamiania programów Algorytm, program Algorytm przepis postępowania prowadzący do rozwiązania określonego zadania. Program zapis algorytmu
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.
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
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
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
Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie Krzysztof Banaś Podstawy programowania 1 są sposobem na przechowywanie w ramach pojedynczej zmiennej zestawu zmiennych różnych typów,
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
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
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
JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak
JAVA Wstęp do programowania w języku obiektowym Bibliografia: JAVA Szkoła programowania, D. Trajkowska Ćwiczenia praktyczne JAVA. Wydanie III,M. Lis Platforma JSE: Opracował: Andrzej Nowak JSE (Java Standard
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
Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje
Podstawy informatyki Informatyka stosowana - studia niestacjonarne - Zajęcia nr 4 Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w
Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska
Instytut Mechaniki i Inżynierii Obliczeniowej www.imio.polsl.pl fb.com/imiopolsl @imiopolsl Wydział Mechaniczny Technologiczny Politechnika Śląska Języki programowania z programowaniem obiektowym Laboratorium
utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,
Lista 3 Zestaw I Zadanie 1. Zaprojektować i zaimplementować funkcje: utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, zapisz
Podstawy Programowania C++
Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:
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];
Referencje do zmiennych i obiektów
Referencje do zmiennych i obiektów Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu
Podstawowe części projektu w Javie
Podstawowe części projektu w Javie Pakiet w Javie to grupa podobnych typów klas, interfejsów i podpakietów. Pakiet w Javie może być wbudowany lub zdefiniowany przez użytkownika. Istnieje wiele wbudowanych
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
Wstęp do informatyki- wykład 9 Funkcje
1 Wstęp do informatyki- wykład 9 Funkcje Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy Grębosz, Opus magnum
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
Wstęp do Programowania, laboratorium 02
Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite
Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie
Część X C++ Typ znakowy służy do reprezentacji pojedynczych znaków ASCII, czyli liter, cyfr, znaków przestankowych i innych specjalnych znaków widocznych na naszej klawiaturze (oraz wielu innych, których
> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017
> C++ wskaźniki Dane: Iwona Polak iwona.polak@us.edu.pl Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017 >??? Co to jest WSKAŹNIK? ++ wskaźniki 2 / 20 >??? Co to jest WSKAŹNIK? To po prostu ADRES
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
Programowanie i struktury danych
Programowanie i struktury danych 1 / 19 Dynamiczne struktury danych Dynamiczną strukturą danych nazywamy taka strukturę danych, której rozmiar, a więc liczba przechowywanych w niej danych, może się dowolnie
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
Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41
Programowanie w C++ Wykład 2 Katarzyna Grzelak 5 marca 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41 Reprezentacje liczb w komputerze K.Grzelak (Wykład 1) Programowanie w C++ 2 / 41 Reprezentacje
Rozdział 4 KLASY, OBIEKTY, METODY
Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej
Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal
Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO Rozdział 1. Wybór i instalacja kompilatora języka Pascal 1.1. Współczesne wersje kompilatorów Pascala 1.2. Jak zainstalować
Programowanie w języku C++ Grażyna Koba
Programowanie w języku C++ Grażyna Koba Kilka definicji: Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i zasad