Język C++ zajęcia nr 2

Podobne dokumenty
Język C zajęcia nr 11. Funkcje

TEMAT : KLASY DZIEDZICZENIE

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

W dowolnym momencie można zmienić typ wskaźnika.

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

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

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

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

Lab 9 Podstawy Programowania

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

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

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

Wykład 8: klasy cz. 4

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Przekazywanie argumentów wskaźniki

Zmienne, stałe i operatory

Referencje do zmiennych i obiektów

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

Materiały do zajęć VII

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

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

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Wykład 5: Klasy cz. 3

Język C zajęcia nr 12. Struktury i unie

Funkcje. Deklaracja funkcji. Definicja funkcji. Wykorzystanie funkcji w programie.

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

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

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

Języki i techniki programowania Ćwiczenia 2

tablica: dane_liczbowe

Wstęp do informatyki- wykład 10 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

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

Wstęp do programowania

Wykład nr 3. Temat: Wskaźniki i referencje. Edward Morgan Forster

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

Język C, tablice i funkcje (laboratorium, EE1-DI)

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Pola i metody statyczne

Laboratorium nr 10. Temat: Funkcje cz.2.

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

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.

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

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

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE

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

Tablice (jedno i wielowymiarowe), łańcuchy znaków

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

Funkcja, argumenty funkcji

Prof. Danuta Makowiec Instytut Fizyki Teoretycznej i Astrofizyki pok. 353, tel danuta.makowiec at gmail.com

Wstęp do programowania

Wskaźniki. Informatyka

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

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

Wykład 4: Klasy i Metody

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Programowanie komputerowe. Zajęcia 3

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

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

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

1 Podstawy c++ w pigułce.

7. Pętle for. Przykłady

Programowanie obiektowe w C++ Wykład 12

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

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

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

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

Rozdział 4 KLASY, OBIEKTY, METODY

Konstruktor kopiujacy

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

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

2 Przygotował: mgr inż. Maciej Lasota

Wstęp do informatyki- wykład 11 Funkcje

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

Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy:

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Programowanie proceduralne w języku C++ Funkcje

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

Wstęp do informatyki- wykład 9 Funkcje

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

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

Część 4 życie programu

Wymiar musi być wyrażeniem stałym typu całkowitego, tzn. takim, które może obliczyć kompilator. Przykłady:

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

1 Wielokrotne powtarzanie tych samych operacji

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

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

Funkcje. Piotr Zierhoffer. 7 października Institute of Computer Science Poznań University of Technology

PARADYGMATY PROGRAMOWANIA Wykład 3

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

Zadeklarowanie tablicy przypomina analogiczną operację dla zwykłych (skalarnych) zmiennych. Może zatem wyglądać na przykład tak:

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ

Programowanie komputerowe. Zajęcia 1

Transkrypt:

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 może mieć formę: = wyrażenie; = lista inicjalizatorów ; ( lista wyrażeń ); Wyrażenia występujące w inicjalizatorze mogą być dowolnymi poprawnymi wyrażeniami języka C++. Inicjalizator w formie listy wyrażeń w nawiasach jest używany między innymi do wywołania odpowiedniego konstruktora dla definiowanego obiektu klasy. Może być również stosowany do inicjalizowania nieobiektowych typów danych. int a(16); // a=16 int b(a+4); // b=20

Definicja zmiennej w instrukcji for W instrukcji for w miejscu pierwszego wyrażenia może wystąpić definicja wprowadzająca zmienne wykorzystywane w pętli: for ( def wyr2 ; wyr3 ) inst Definicja def może być połączona z inicjalizacją definiowanych zmiennych. Wprowadź i uruchom program: #include <stdio.h> for(long s=1,k=1;k-13;s*=++k)printf("%2ld! = %ld\n",k,s); 1! = 1 2! = 2 3! = 6 4! = 24 5! = 120 6! = 720 7! = 5040 8! = 40320 9! = 362880 10! = 3628800 11! = 39916800 12! = 479001600

Referencje Pojęcie referencji jest ściśle związane z przekazywaniem argumentów przy wywołaniu funkcji i zwracaniem przez nią wyniku. W języku C argumenty mogą być przekazywane jedynie przez wartość, co oznacza, że tworzona jest kopia aktualnej wartości argumentu, która po przekazaniu do funkcji, odbierana jest tam jako parametr formalny. W funkcji można zmienić wartość zmiennej będącej parametrem formalnym, co jednak nie zmienia oryginalnej wartości argumentu. W języku C++ argumenty mogą być przekazywane zarówno przez wartość, jak i przez referencję. Referencja do pewnej zmiennej jest inną nazwą, synonimem tej zmiennej. Obowiązuje zasada: Każda operacja wykonana na zmiennej referencyjnej w rzeczywistości wykonana zostanie na zmiennej, do której odnosi się referencja. W deklaracji, nazwa zmiennej referencyjnej poprzedzona jest symbolem &. Deklarowana zmienna referencyjna musi być inicjalizowana. Inicjalizatorem jest najczęściej l-wartość (zwykle nazwa zmiennej), do której odnosi się deklarowana referencja. Inicjalizator musi mieć w takim przypadku typ zgodny z typem zmiennej referencyjnej. Uwaga: Można deklarować zmienne będące referencjami do różnych typów, jednak bez tworzenia referencji do referencji, tablic referencji oraz wskaźników na referencje.

Wprowadź i uruchom program, zinterpretuj wyniki: int k=16; // k otrzymuje wartość 16 int &rk=k; // rk jest referencją do k cout << k << " " << rk << endl; rk=8; // faktycznie następuje zmiana k cout << k << " " << rk << endl; 16 16 8 8 Po dokonaniu inicjalizacji zmiennej referencyjnej nie można zmienić jej referencji, co oznacza, że referencja stale odnosi się do tego samego obiektu. Uwaga: W zapisie deklaracji referencji nie musi występować spacja. Umieszcza się ją jedynie dla podniesienia czytelności tekstu programu. Równoważne zapisy deklaracji: int & p=q; int &p=q; int& p=q; int&p=q; Każdy operator działający na zmiennej referencyjnej (zgodnie z ogólną zasadą dotyczącą referencji) w rzeczywistości działa na zmiennej, z którą dana referencja jest związana. W szczególności operator adresu zastosowany do zmiennej referencyjnej daje adres zmiennej, z którą dana zmienna referencyjna jest związana (np. jeżeli int &y=x; to wyrażenie &y zwraca wartość &x, czyli adres zmiennej x)

Wprowadź i uruchom programy, zinterpretuj wyniki: Adres zmiennej referencyjnej: #include <stdio.h> int x; int &y=x; printf("%p\n%p",&x,&y); // Wyświetlenie adresów zmiennych 0028FF44 0028FF44 (rezultaty mogą być różne na różnych maszynach) Referencje do tablic. Indeksowanie zmiennej referencyjnej: int a[8]=0,1,2,3,4,5,6,7; int (&b)[8]=a; // b jest referencją do tablicy a // int &b[8] byłoby tablicą referencji cout <<"a[5]="<<a[5]<<" b[5]="<<b[5]<<endl; a[5]=5 b[5]=5

Referencje do stałych i zmiennych Zmienna referencja do zmiennej ma miejsce, gdy zmienna referencyjna i jej inicjalizator nie są deklarowane z modyfikatorem const oraz inicjalizator nie jest literałem lub stałym wskaźnikiem. Referencja sprawia, że każda modyfikacja zmiennej referencyjnej powoduje identyczną modyfikację zmiennej, która była inicjalizatorem. Również każda zmiana zmiennej inicjalizacyjnej pociąga za sobą taką samą zmianę zmiennej referencyjnej. Referencja do zmiennej (zinterpretuj program): int a=4; int &b=a; a++; b++; a=4 b=4 a=5 b=5 a=6 b=6 ----- Użycie modyfikatora const w deklaracji zmiennej referencyjnej powoduje, że zmienna referencyjna nie może być później bezpośrednio modyfikowana. Inicjalizatorem deklarowanej w taki sposób zmiennej referencyjnej nie musi być l-wartość oraz nie jest wymagana zgodność typu inicjalizatora z typem zmiennej referencyjnej. -----

Stała referencja do zmiennej dotyczy zmiennej referencyjnej deklarowanej z modyfikatorem const i inicjalizowanej l-wartością. Nie można modyfikować samej zmiennej referencyjnej bezpośrednio, ale można zmieniać jej inicjalizator. Stała referencja do zmiennej (zinterpretuj program): int a=4; const int &b=a; a++; // b++; Błąd, nie można modyfikować stałej a=4 b=4 a=5 b=5 Stała referencja do stałej występuje, gdy zmienna referencyjna i jej inicjalizator są deklarowane z modyfikatorem const. W takim przypadku nie jest możliwa zmiana wartości zmiennej referencyjnej ani jej inicjalizatora. Stała referencja do stałej (zinterpretuj program): const int a=4; const int &b=a; // a++; Błąd, nie można modyfikować stałej // b++; Błąd, nie można modyfikować stałej a=4 b=4

Główne wykorzystanie referencji wiąże się z przekazaniem argumentów do wywołanej funkcji. Przekazanie argumentu przez referencję wymaga umieszczenia w deklaracji funkcji odpowiedniego parametru formalnego typu referencyjnego. W momencie wywołania funkcji przekazanie argumentu do parametru typu referencyjnego odbywa się w sposób, którego konsekwencje są identyczne do inicjalizacji zmiennej referencyjnej. Wprowadź i uruchom program, zinterpretuj wyniki: Referencyjne przekazanie argumentu: void fun(int a, int &b) // Każde wywołanie inicjalizuje referencyjny parametr b a++; // Inkrementacja zmiennej a b++; // Faktycznie inkrementacja zmiennej y cout << " Wewnatrz funkcji a=" << a << " b=" << b << endl; return; int x=6,y=8; cout << " Przed wywolaniem funkcji x=" << x << " y=" << y << endl; fun(x,y); cout << "Po powrocie z wywolania funkcji x=" << x << " y=" << y << endl; Przed wywolaniem funkcji x=6 y=8 Wewnatrz funkcji a=7 b=9 Po powrocie z wywolania funkcji x=6 y=9

Mechanizm referencji kompilator języka C++ zwykle realizuje poprzez przekazywanie adresu obiektu. Daje to dodatkową korzyść implementacyjną: Oszczędność czasu - nie trzeba wykonywać dodatkowych rozkazów układających na stosie struktury danych przekazywane jako argumenty, Oszczędność pamięci - mniejsze zapotrzebowanie na przestrzeń stosu. Również zwracany przez funkcję rezultat może być typu referencyjnego. Daje to taki efekt, jakby w tekście programu w miejscu wywołania funkcji po powrocie z niej znajdowała się pewna l-wartość. Wynikają z tego wszystkie konsekwencje związane z l-wartością, w szczególności wywołanie takiej funkcji może wystąpić jako modyfikowany argument operatorów przypisania lub inkrementacji. Wprowadź i uruchom program, zinterpretuj wyniki: Referencja zwracana przez funkcję: int kot=4; // Zmienna globalna int& kotek() return kot; // Referencyjny rezultat funkcji // Zwracanym rezultatem jest referencja do kot cout << "kot=" << kot << endl; kotek()=7; cout << "kot=" << kot << endl; kotek()++; cout << "kot=" << kot << endl; kot=4 kot=7 kot=8

Uwaga: W przypadku funkcji zwracających referencję l-wartość występująca w instrukcji return musi reprezentować obiekt istniejący po powrocie z wywołania funkcji (nie może to być np. obiekt lokalny zdefiniowany wewnątrz tej funkcji). Zadanie dla zainteresowanych (opcjonalne) zaliczenie możliwe wyłącznie na następnych zajęciach po przedstawieniu wydruku (kod źródłowy, okno z efektami uruchomienia) i po ustnym zaliczeniu. Napisz i uruchom program, który na szachownicy (8 x 8) ustawia losowo n pionków (wartość n podaje użytkownik, n<=6000, na każdym polu może stanąć wiele - max. 99 - pionków), po czym drukuje tablicę z liczbą pionków znajdujących się na każdym polu. Wymagania dodatkowe: - wyznaczenie współrzędnych pionka (każda współrzędna = 0, 1, 2, 3, 4, 5, 6, lub 7) wykonywane jest przez osobną funkcję ustaw (wywoływaną z funkcji main), - przekazywanie argumentów (obie współrzędne położenia pionka) pomiędzy funkcją main i ustaw musi odbywać się przez referencje: void ustaw(int &x, int &y) - wybór każdego pola planszy musi być w przybliżeniu jednakowo prawdopodobny, wskazówka: wyznacz współrzędną jako resztę z dzielenia pseudolosowej liczby całkowitej (wygenerowanej przeze rand()) przez 8, - do operacji wejścia-wyjścia użyj mechanizmów strumieniowych (cin, cout). - w funkcji main zadeklaruj dwuwymiarową tablicę (tablicę tablic) 8 x 8 (np. int szachownica[8][8] ), wczytaj (z użyciem cin) wartość n, zastosuj pętlę realizującą n wywołań funkcji ustaw (modyfikując po każdym wywołaniu odpowiedni element tablicy), a na końcu wydrukuj tablicę z pionowym wyrównaniem pozycji dziesiętnych w poszczególnych kolumnach, np.: 0 1 0 6 5 7 2 1 1 12 5 0 14 22 56 3 12 7