Niejawne funkcje składowe

Wielkość: px
Rozpocząć pokaz od strony:

Download "Niejawne funkcje składowe"

Transkrypt

1 Niejawne funkcje składowe W języku C++ automatycznie tworzone są następujące funkcje składowe (o ile nie zostaną one jawnie zdefiniowane): konstruktor domyślny konstruktor kopiujący operator przypisania destruktor domyślny operator adresu 1

2 Konstruktor kopiujący Konstruktor kopiujący jest wywoływany wtedy, kiedy nowo tworzony obiekt jest inicjowany już istniejącym obiektem tej samej klasy: o inicjujemy nowy obiekt istniejącym obiektem Punkt a(1,1), b(a); // definicja obiektu b za pomocą a Punkt c=a; Punkt d=punkt(a); Punkt *wpunkt = new Punkt(a); o przekazujemy obiekt do funkcji przez wartość nowy obiekt jest kopią funkcja(a); // przekazanie obiektu a do funkcji o zwracamy obiekt z funkcji przez wartość c=funkcja(); // zwrócenie obiektu z funkcji Jeśli użytkownik takiego konstruktora nie dostarczy, to stosowany jest domyślny konstruktor kopiujący, wykonujący dokładną, bit po bicie kopię obiektu. Przykład: class Ulamek int l; // licznik int m; // mianownik... public: Ulamek(int a=0, int b=1) // Konstruktor inicjujący... ; Ulamek f0, f1(1), f2(6,3), f3(f2); Tutaj będzie użyty odpowiedni konstruktor inicjujący Tutaj będzie użyty konstruktor kopiujący W klasie Ulamek brak jest konstruktora kopiującego. Kompilator utworzy własny konstruktor kopiujący. Pytanie: Czy domyślny konstruktor kopiujący zawsze zrobi to co trzeba? 2

3 Kiedy potrzebny jest własny konstruktor kopiowania? Przykład: tablica dynamiczna, zdefiniowany jest tylko konstruktor inicjujący.(w3p7) #include <iostream> using namespace std; Programowanie obiektowe Wykład 3 class Tablica int lelem; // liczba elementów tablicy double * T ; // wskaźnik do obszaru przydzielonego dla tablicy public : Tablica (int n) T = new double [lelem = n] ; cout << "++ Konstruktor - adres obiektu: " << this << " - adres tablicy: " << T << "\n" ; ~Tablica () cout << "-- Destruktor - adres obiektu: " << this << " - adres tablicy: " << T << "\n" ; delete [] T ; friend void func(tablica b); ; void func (Tablica b) cout << "*** func: Działam na kopii - adres obiektu: " << &b <<" - adres tablicy: " << b.t <<endl; int main() Tablica a(4) ; cout << "** Zaczynam main **" << endl; cout << "** Wywołuję func **\n" ; func (a) ; cout << "** Kończę main **" << endl; return 0; Jak wygląda przebieg programu? ++ Konstruktor - adres obiektu: 0xbffffc70 - adres tablicy: 0x8049f50 ** Zaczynam main ** ** Wywołuję func ** *** func: Działam na kopii - adres obiektu: 0xbffffc60 - adres tablicy: 0x8049f50 -- Destruktor - adres obiektu: 0xbffffc60 - adres tablicy: 0x8049f50 ** Kończę main ** -- Destruktor - adres obiektu: 0xbffffc70 - adres tablicy: 0x8049f50 Gdzie jest pułapka? 3

4 Jak działa konstruktor kopiujący? Domyślny konstruktor kopiujący przepisuje kolejno wartość każdej niestatycznej składowej do jej odpowiednika w nowo tworzonym obiekcie. Jest to tzw. kopiowanie płytkie (ang. memberwise copying, shallow copying). W przypadku obiektów o składowych dynamicznych potrzebne jest kopiowanie głębokie zapewniane przez własny konstruktor kopiujący. Konstruktor taki ma prototyp: MojaKlasa(const MojaKlasa &); Przykład (2): #include <iostream> class Tablica int lelem ; double * wsk ; public : Tablica (int n) wsk = new double [lelem = n] ; ~Tablica () delete [] wsk ; //////////////////////////////////////////////////////////////// Tablica (const Tablica & v) // konstruktor kopiujący double *wsk = new double [lelem = v.lelem] ; // przydzielenie pamięci int i ; for (i=0 ; i<lelem ; i++) // skopiowanie do nowej pamięci wsk[i]=v.wsk[i] ; //////////////////////////////////////////////////////////////// ; 4

5 Inicjalizacja: tworzenie nowego obiektu. Przypisanie: zmiana wartości istniejącego obiektu. Punkt a(1,1), b; // inicjalizacja b=a; // przypisanie Operator przypisania = Występuje podobny problem jak w przypadku kopiowania. W przypadku użycia domyślnego operatora przypisania wykonywana jest kopia składowych bit po bicie, tak jak w przypadku domyślnego konstruktora kopiowania - czyli jest to kopiowanie płytkie. class Tablica int lelem ; int *T ; public : Tablica (int n)... ; int main() Tablica a(3), b(2); Wykonujemy w programie instrukcję przypisania: b = a; b wskazuje na ten sam obszar pamięci co a Pozostaje zajęta pamięć ze sterty, nie ma do niej dostępu Rozwiązanie: przeciążenie operatora przypisania = 5

6 Prototyp operatora przypisania =: MojaKlasa& operator=(const MojaKlasa &); Przykład (3): #include <iostream> using namespace std; class Tablica int lelem ; int *T ; public : Tablica (int n) T = new int [lelem = n] ; for (int i=0 ; i<lelem ; i++) T[i] = 0 ; ~Tablica () delete T ; // przeciążony operator przypisania Tablica& operator= (const Tablica &) ; ; /////////////////////////////////////////////////// // przeciążony operator przypisania Tablica & Tablica::operator = (const Tablica & v) if (this!= &v) // czy przypisujemy obiekt do siebie samego // 1. zwolnienie pamięci obiektu po lewej stronie = delete [ ] T ; // 2. przydzielenie na nowo pamięci T = new int [lelem = v.lelem] ; // 3. przepisanie do nowej pamięci obiektu po prawej stronie = for (int i=0 ; i<lelem ; i++) T[i] = v.t[i] ; else cout << " nic nie robimy \n" ; return * this ; //////////////////////////////////////////////////// int main() Tablica a(5), b(3), c(4) ; cout << "** przypisanie a=b \n" ; a = b ; // czyli a.operator=(b) cout << "** przypisanie c=c \n" ; c = c ; // czyli c.operator=(c) cout << "** przypisanie a=b=c \n" ; a = b = c ; // czyli a.operator=(b.operator=(c)) 6

7 Czas życia obiektów Obiekty mogą być tworzone: za pomocą deklaracji zarządza nimi kompilator za pomocą operatorów dynamicznego zarządzania pamięcią zarządza nimi użytkownik w pewnych sytuacjach tworzone są również obiekty tymczasowe W każdym wypadku po utworzeniu obiektu automatycznie wywołany zostanie konstruktor (dostarczony przez użytkownika lub kompilator). Bezpośrednio przed usunięciem obiektu wywoływany jest destruktor (dostarczony przez użytkownika lub kompilator). Obiekty tworzone za pomocą deklaracji Rozróżnia się dwa typy takich obiektów: automatyczne i statyczne. Obiekty automatyczne tworzone są w funkcji lub w wewnętrznym bloku; są usuwane, gdy wychodzi się z danej funkcji lub bloku. Obiekty statyczne tworzone są na zewnątrz wszystkich funkcji lub w funkcji za pomocą deklaracji poprzedzonej słowem static, powstają przed rozpoczęciem wykonywania funkcji main()i są usuwane po jej zakończeniu. Obiekty dynamiczne Obiekty dynamiczne tworzone są przy użyciu operatora new, usuwane są na życzenie za pomocą operatora delete. Użycie operatora new powoduje wywołanie konstruktora inicjującego. Przykład obiektu dynamicznego: Punkt * wsk; wsk = new Punkt(1,1); // wywołany konstruktor Punkt(int,int) wsk->drukuj(); // równoważne (*wsk).drukuj() Punkt * inny; inny = new Punkt; // równoważne new Punkt() 7

8 Obiekty tymczasowe Obiekty tymczasowe powstają w różnych kontekstach. Po wykorzystaniu usuwane są najszybciej jak to jest możliwe (tak mówi standard). Przykład a=punkt(1,2) ; Wykonanie: 1. Utwórz obiekt tymczasowy typu Punkt 2. Wywołaj konstruktor dla tego obiektu i przekaż mu argumenty. 3. Skopiuj jego zawartość do obiektu a. 4. Wywołaj destruktor. 5. Usuń obiekt tymczasowy. 8

9 Niszczenie obiektów klasy C++ automatycznie zwalnia zasoby przydzielone obiektowi klasy w chwili zakończenia trwania tego obiektu. Możliwe są trzy przypadki: wychodzimy z zakresu obowiązywania nazwy (wracamy z funkcji, w której został zadeklarowany obiekt lub kończymy blok, w którym został zdefiniowany obiekt), obiekt utworzony za pomocą operatora new jest usuwany za pomocą operatora delete Data *d = new Data(1,1,2002);... delete d; kończymy program - usuwane są wtedy wszystkie obiekty globalne. Przed usunięciem obiektu automatycznie wywoływany jest destruktor klasy. Destruktor oprócz zwalniania zasobów (jeśli są przydzielone dynamicznie), może wykonywać jeszcze inne zadania porządkujące, na przykład aktualizację pewnych liczników. Jeśli nie istnieją żadne zasoby, które należałoby zwolnić przed usunięciem obiektu, nie trzeba dostarczać własnego destruktora, wystarczy destruktor wygenerowany przez kompilator. 9

10 Stałe i metody stałe Referencja jako stałe Zasada: jeśli wartość parametru przekazywanego przez referencję może zostać zmodyfikowana wewnątrz funkcji, to argumentami mogą być tylko te obiekty, dla których ta modyfikacja jest dozwolona. Przykład: W funkcji main() : f3 = f1+ulamek(2,3); // tworzony obiekt tymczasowy f3 += 2; // stała Która postać jest prawidłowa? Ulamek Ulamek::operator+( Ulamek &b) Ulamek Ulamek::operator+(const Ulamek &b) Ulamek Ulamek::operator += (Ulamek &b) Ulamek Ulamek::operator += (const Ulamek &b) Stałe metody Nie zmieniają obiektów. class X int i; public: X(int ii); int f() const;... ; X::X(int ii) : i(ii) int X::f()const return i; int main() X x1(1); const X x2(2); x1.f(); x2.f();... 10

11 Funkcja składowa zadeklarowana jako stała jest to informacja dla kompilatora, że może być ona wywołana w stosunku do obiektu będącego stałą. Funkcja składowa nie zadeklarowana jawnie jako stała jest traktowana jako taka, która modyfikuje dane obiektu. Słowo const wchodzi w skład sygnatury funkcji. Kompilator zgłasza błąd, jeśli w funkcji występuje próba zmiany wartości składowej lub wywołanie innej funkcji składowej, która nie została zadeklarowana jako stała. Stałe funkcje składowe mogą być wywoływane zarówno w stosunku do stałych obiektów, jak i obiektów nie będących stałymi. Przykład (w3p4.cpp): #include <iostream> using namespace std; class Wektor int const rozmiar; int * const tab; public: Wektor (int n) : rozmiar(n), tab(new int[n]) ~Wektor() delete [] tab; int t_rozmiar() const return rozmiar; // int &element(int n) return tab[n]; // int element(int n) const return tab[n]; int &operator[](int n) return tab[n]; int operator[](int n) const return tab[n]; ; int main() Wektor a(5); // a.element(2)=1; a[2]=1; cout << "rozmiar: " << a.t_rozmiar()<< endl;; // cout << "wartosc elementu 2: " << a.element(2)<< endl; cout << "wartosc elementu 2: " << a[2]<< endl; 11

12 Przykład (w3p5.cpp) // Eckel, Thinking in C++, str. 289 #include <iostream> #include <cstdlib> // Generator liczb losowych #include <ctime> // Do inicjacji generatora liczb losowych using namespace std; class Quoter int lastquote; public: Quoter(); // Nie może być stała - modyfikuje obiekt const char* quote() const; // Może być stała nic nie modyfikuje ; Quoter::Quoter() lastquote = -1; srand(time(0)); // Inicjacja generatora liczb losowych const char* Quoter::quote() const static const char* quotes[] = "Czy mamy sie juz smiac?", "Lekarze zawsze wiedza najlepiej", "Sowy nie sa tym, czym sie wydaja", "Strach ma wielkie oczy", "Nie ma naukowego dowodu " "na poparcie tezy " "ze zycie jest na serio", "To, co nas bawi, czyni nas madrzejszymi", ; const int qsize = sizeof quotes/sizeof *quotes; int qnum = rand() % qsize; qnum = rand() % qsize; return quotes[qnum]; int main() const Quoter q1; cout << q1.quote() << endl; Quoter q2; cout << q2.quote() << endl; 12

13 Przykłady - dynamiczne struktury danych Przykład 1: Stos (w3p8) #include <iostream> using namespace std; class Stos private: int *tab; int wlk; // rozmiar stosu int capacity; //rozmiar tablicy void grow(); public: Stos(); Stos(Stos const&); ~Stos(); Stos& operator=(stos const&); void push(int i); // wkłada liczbę na stos void pop(); // zdejmuje liczbę ze stosu int top() const; // udostępnia wartość liczby z wierzchołka stosu int & top(); // udostępnia referencję do liczby na wierzchołku stosu bool empty() const; // sprawdza czy stos jest pusty? int s_size() const; // zwraca rozmiar stosu ; Stos::Stos () capacity = 1; wlk = 0; tab = new int[capacity]; Stos::~Stos() delete [] tab; Stos::Stos(Stos const& S) capacity = S.capacity; wlk = S.wlk; tab = new int[capacity]; for (int i=0; i<wlk; i++) tab[i]=s.tab[i]; Stos& Stos::operator=(Stos const& S) if (this==&s) return *this; if (capacity<s.wlk) delete [] tab; capacity=s.wlk; tab=new int[capacity]; 13

14 wlk=s.wlk; for (int i=0; i<wlk; i++) tab[i]=s.tab[i]; return *this; void Stos::push(int i) if (wlk==capacity) grow(); tab[wlk]=i; wlk++; void Stos::pop() if (!empty()) wlk--; int Stos::top() const if (!empty()) return tab[wlk-1]; else cout<<"stos pusty"<<endl; return -1; int& Stos::top() if (!empty()) return tab[wlk-1]; else cout<<"stos pusty"<<endl; return tab[0]; bool Stos::empty() const return wlk==0; int Stos::s_size()const return wlk; void Stos::grow() if (wlk==capacity) capacity *=2; int *p = new int[capacity]; for (int i=0; i<wlk; i++) p[i]=tab[i]; delete [] tab; tab=p; 14

15 int main() Stos a; if (a.empty()) cout << "empty" << endl; for (int i=1; i<10; i++) a.push(i); while (!a.empty()) cout << a.top() << " "; a.pop(); 15

16 Przykład 2: obsługa napisów Autor- S.Prata, Szkoła programowania, język C++, wyd.1 (2002), rozdział 12 Klasa String Cechy klasy: powinna umożliwiać przechowywanie napisów zmiennej długości. powinna umożliwiać dostęp do pojedynczych znaków napisu powinna umożliwiać przypisywanie jednego napisu drugiemu powinna umożliwiać porównywanie napisów Programowanie obiektowe Wykład 3 // Plik string1.h -- definicja klasy #include <iostream> using namespace std; #ifndef STRING1_H_ #define STRING1_H_ class String private: char * str; // wskaźnik do napisu - alokacja pamięci // zostanie wykonana w konstruktorze int len; // długość napisu static int num_strings; // ilość obiektów - wprowadzona, aby // pokazac korzystanie ze składowej statycznej static const int CINLIM = 80; // ograniczenie długości danych // wejściowych public: // konstruktory String(const char * s); // constructor String(); // default constructor String(const String &); // copy constructor ~String(); // destructor // przeciążone operatory - metody String & operator=(const String &); String & operator=(const char *); char & operator[](int i); const char & operator[](int i) const; // przeciążone operatory - funkcje zaprzyjażnione friend bool operator<(const String &st, const String &st2); friend bool operator>(const String &st1, const String &st2); friend bool operator==(const String &st, const String &st2); friend ostream & operator<<(ostream & os, const String & st); friend istream & operator>>(istream & is, String & st); // funkcje pomocnicze static int HowMany(); int length () const return len; ; #endif 16

17 // Plik string1.cpp -- metody klasy String #include <iostream> #include <cstring> #include "string1.h" using namespace std; // inicjalizacja składowych statycznych int String::num_strings = 0; // musi być inicjalizowana na zewnatrz // metody statyczne int String::HowMany() return num_strings; // konstruktory i destruktor // tworzenie obiektu String na podstawie napisu w stylu języka C String::String(const char * s) len = strlen(s); str = new char[len + 1]; strcpy(str, s); num_strings++; // śledzenie tworzonych obiektów // konstruktor domyślny String::String() len = 0; str = new char[1]; str[0] = '\0'; num_strings++; // śledzenie tworzonych obiektów // konstruktor kopiujący String::String(const String & st) num_strings++; len = st.len; str = new char [len + 1]; strcpy(str, st.str); // śledzenie tworzonych obiektów // destruktor String::~String() --num_strings; // śledzenie tworzonych obiektów delete [] str; 17

18 // przeciążone operatory metody // operator przypisania -- obiekt String do obiektu String String & String::operator=(const String & st) if (this == &st) return *this; delete [] str; len = st.len; str = new char[len + 1]; strcpy(str, st.str); return *this; // operator przypisania -- napis w stylu języka C do obiektu String String & String::operator=(const char * s) delete [] str; len = strlen(s); str = new char[len + 1]; strcpy(str, s); return *this; // operator [] dla obiektu nie-stałego String char & String::operator[](int i) return str[i]; // operator [] dla obiektu stałego String const char & String::operator[](int i) const return str[i]; 18

19 // przeciążone operatory -- funkcje zaprzyjaźnione bool operator<(const String &st1, const String &st2) return (strcmp(st1.str, st2.str) < 0); bool operator>(const String &st1, const String &st2) return st2.str < st1.str; bool operator==(const String &st1, const String &st2) return (strcmp(st1.str, st2.str) == 0); ostream & operator<<(ostream & os, const String & st) os << st.str; return os; istream & operator>>(istream & is, String & st) char temp[string::cinlim]; is.get(temp, String::CINLIM); if (is) st = temp; while (is && is.get()!= '\n') continue; return is; Programowanie obiektowe Wykład 3 19

20 Komentarze Konstruktory i destruktory // tworzenie obiektu String na podstawie napisu w stylu języka C String::String(const char * s) len = strlen(s); str = new char[len + 1]; strcpy(str, s); num_strings++; // śledzenie tworzonych obiektów // konstruktor domyślny String::String() len = 0; str = new char[1]; str[0] = '\0'; num_strings++; // śledzenie tworzonych obiektów lub String::String() len = 0; str=0; num_strings++; // śledzenie tworzonych obiektów // destruktor String::~String() --num_strings; // śledzenie tworzonych obiektów delete [] str; Wszystkie konstruktory muszą być zgodne z destruktorem. Ponieważ w destruktorze odwołujemy się do tablicy: delete [] str, musimy w obydwu konstruktorach używać new []. Użycie operatora delete [] w stosunku do obiektu, który nie został utworzony jako tablica obiektów nie jest zdefiniowane. Dopuszczalne jest jednak użycie wskaźnika pustego. Składowe statyczne Inicjalizacja składowej statycznej musi być dokonana na zewnątrz klasy. Instrukcję inicjalizacji należy umieścić w pliku z kodem metod. Pole statyczne może być inicjowane wewnątrz klasy, jeśli jest stałą (const) lub typu wyliczeniowego. Metody statyczne Metoda statyczna nie jest związana z żadnym obiektem Jedyne pola, z których korzysta to pola statyczne Przykład użycia funkcji statycznej: cout << String::HowMany()<< endl; 20

21 Przeciążony operator przypisania W klasie mamy dwa przeciążone operatory przypisania: String & operator=(const String &); String & operator=(const char *); Pierwszy z operatorów jest wymagany, ponieważ klasa zawiera składową dynamiczną. Drugi z operatorów został wprowadzony po to, aby można było działać bezpośrednio na napisach w stylu języka C, bez konieczności tworzenia obiektów tymczasowych. Przykład 1: Brak przeciążonego operatora = dla przypisywania napisu. String nazwisko; nazwisko="nowak"; Napis w stylu języka C musi być zamieniony na obiekt String. Wykorzystany zostanie konstruktor jednoargumentowy. Powstanie obiekt tymczasowy. Po przypisaniu zostanie usunięty. Przykład 2: Zdefiniowano przeciążony operatora String & operator=(const char *): // operator przypisania -- napis w stylu języka C do obiektu String String & String::operator=(const char * s) delete [] str; len = strlen(s); str = new char[len + 1]; strcpy(str, s); return *this; String nazwisko; nazwisko="nowak"; Użyty zostanie bezpośrednio operator przypisania. Zasada: Konwersje zdefiniowane przez użytkownika (za pomocą konstruktorów lub odpowiednich funkcji konwersji) są brane pod uwagę tylko wtedy, kiedy są niezbędne. Przeciążone operatory porównywania Dzięki temu, że są zdefiniowane jako funkcje zaprzyjaźnione, możliwe jest porównywanie obiektów String z napisami w stylu języka C 21

22 Przeciążony operator [] Musi umożliwiać korzystanie zarówno z obiektów nie-stałych jak i stałych. W przypadku obiektów nie-stałych: może być użyty zarówno do wyprowadzania jak i przypisywania wartości. // operator [] dla obiektu nie-stałego String // możliwy odczyt -- zapis char & String::operator[](int i) return str[i]; // operator [] dla obiektu stałego String // możliwy tylko odczyt const char & String::operator[](int i) const return str[i]; String nazwisko("nowak"); // obiekt nie jest stały const String odp("tak"); // obiekt stały // obiekt nie jest stały cout << nazwisko[0]; nazwisko[0]='n'; cin >> nazwisko[0]; // obiekt stały cout << odp[0]; 22

23 Przykład 3: obsługa tablic (w3p6.cpp) Autor- S.Prata, Szkoła programowania, język C++, wyd.1 (2002), rozdział 14 Klasa ArrayDb Cechy klasy: przechowywanie elementów typu double dostęp do elementów za pomocą indeksu możliwość przypisania jednej tablicy drugiej sprawdzanie czy podany indeks jest z zakresu // Plik arraydb.h -- definicja klasy ArrayDb #ifndef ARRAYDB_H_ #define ARRAYDB_H_ #include <iostream> using namespace std; class ArrayDb private: unsigned int size; // ilość elementów tablicy double * arr; // adres pierwszego elementu public: // konstruktory i destruktor ArrayDb(); explicit ArrayDb(unsigned int n, double val = 0.0); ArrayDb(const double * pn, unsigned int n); ArrayDb(const ArrayDb & a); ~ArrayDb(); Programowanie obiektowe Wykład 3 // metody unsigned int ArSize() const return size; // rozmiar tablicy double Average() const; // średnia wartość // przeciążone operatory -- metody double & operator[](int i); const double & operator[](int i) const; ArrayDb & operator=(const ArrayDb & a); // przeciążone operatory -- funkcje zaprzyjaźnione friend ostream & operator<<(ostream & os, const ArrayDb & a); ; #endif 23

24 // arraydb.cpp -- metody klasy ArrayDb #include <iostream> using namespace std; #include <cstdlib> // exit() prototype #include "arraydb.h" // konstruktory i destruktor // konstruktor domyślny ArrayDb::ArrayDb() arr = 0; size = 0; // konstruktor tworzący tablicę n-elementową, // o wartościach elementów równych val ArrayDb::ArrayDb(unsigned int n, double val) arr = new double[n]; size = n; for (int i = 0; i < size; i++) arr[i] = val; // konstruktor tworzący tablicę n-elementową, // na podstawie tablicy pn ArrayDb::ArrayDb(const double *pn, unsigned int n) arr = new double[n]; size = n; for (int i = 0; i < size; i++) arr[i] = pn[i]; // konstruktor kopiujący ArrayDb::ArrayDb(const ArrayDb & a) size = a.size; arr = new double[size]; for (int i = 0; i < size; i++) arr[i] = a.arr[i]; // destruktor ArrayDb::~ArrayDb() delete [] arr; // przeciążanie operatorów -- metody // operator [] -- nie-stały obiekt double & ArrayDb::operator[](int i) if (i < 0 i >= size) cerr << "Error in array limits: " << i << " is a bad index\n"; 24

25 exit(1); return arr[i]; // operator [] -- stały obiekt const double & ArrayDb::operator[](int i) const if (i < 0 i >= size) cerr << "Error in array limits: " << i << " is a bad index\n"; exit(1); return arr[i]; // operator przypisania ArrayDb & ArrayDb::operator=(const ArrayDb & a) if (this == &a) // if object assigned to self, return *this; // don't change anything delete [] arr; size = a.size; arr = new double[size]; for (int i = 0; i < size; i++) arr[i] = a.arr[i]; return *this; // przeciążanie operatorów -- funkcje zaprzyjaźnione // operator wyjścia: drukuj po pięć w wierszu ostream & operator<<(ostream & os, const ArrayDb & a) int i; for (i = 0; i < a.size; i++) os << a.arr[i] << " "; if (i % 5 == 4) os << "\n"; if (i % 5!= 0) os << "\n"; return os; 25

26 // metody // średnia wartość elementów tablicy double ArrayDb::Average() const double sum = 0; int i; int lim = ArSize(); for (i = 0; i < lim; i++) sum += arr[i]; if (i > 0) return sum / i; else cerr << "No entries in score array\n"; return 0; Komentarze Konstruktory i destruktor Konstruktor explicit ArrayDb(unsigned int n, double val = 0.0) może być wywołany z jednym argumentem, pełni więc dodatkowo rolę niejawnej funkcji konwersji. Za pomocą słowa explicit rezygnujemy z tej funkcji. 26

27 ZADANIA 1. Co to jest konstruktor domyślny? 2. Co to jest konstruktor inicjujący? 3. Co decyduje o kolejności inicjowania składowych obiektu? 4. Co to jest konstruktor kopiujący? 5. Dlaczego konstruktor kopiujący nie może pobierać argumentu przez wartość? 6. Co to jest destruktor? Co robi destruktor? Co powinien robić destruktor? 7. Jakie metody generuje kompilator, gdy nie zostaną jawnie zdefiniowane w klasie? Jak one działają? 8. Co to są i w jaki sposób deklaruje się metody stałe klasy? 9. Opracuj klasę do przetwarzania liczb mieszanych, takich jak na przykład "1 1/3". Zdefiniuj operacje dodawania, odejmowania, mnożenia i dzielenia. Na przykład: "1 1/ /2 = 3 5/6" 10. Opracuj klasę od obsługi tablic rzadkich. Elementy tablicy mogą mieć indeksy z zakresu od 0 do W tablicy może być do 100 elementów różnych od zera. 11. Stephen Prata, Szkoła programowania. Język C++, wyd.v, 2006, str. 684, pytania sprawdzające 1-5, 12. Stephen Prata, Szkoła programowania. Język C++, wyd.v, 2006, str , ćwiczenia programistyczne

Konstruktor kopiujący

Konstruktor kopiujący Konstruktor kopiujący Konstruktor kopiujący jest wywoływany wtedy, kiedy nowo tworzony obiekt jest inicjowany już istniejącym obiektem tej samej klasy: inicjujemy nowy obiekt istniejącym obiektem Punkt

Bardziej szczegółowo

Wstęp do Programowania 2

Wstęp do Programowania 2 Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 8 Przykład realizowany na wykładzie Klasy StringBad i String. Wstępne pliki załaczone jako źródła.

Bardziej szczegółowo

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

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27 Programowanie w C++ Wykład 12 Katarzyna Grzelak 28 maja 2018 K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27 Klasy cd K.Grzelak (Wykład 12) Programowanie w C++ 2 / 27 Klasy - powtórzenie Klasy typy definiowane

Bardziej szczegółowo

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30 Programowanie w C++ Wykład 11 Katarzyna Grzelak 13 maja 2019 K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30 Klasy cd K.Grzelak (Wykład 11) Programowanie w C++ 2 / 30 Klasy - powtórzenie Klasy typy definiowane

Bardziej szczegółowo

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

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

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 3

PARADYGMATY PROGRAMOWANIA Wykład 3 PARADYGMATY PROGRAMOWANIA Wykład 3 Definiowanie operatorów i ich przeciążanie Przykłady zastosowania operatorów: a) operator podstawienia ( = ) obiektów o złożonej strukturze, b) operatory działania na

Bardziej szczegółowo

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006) Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006) Część 1. Teoria Wyjaśnij pojęcia, podaj przykład: klasa obiekt konstruktor destruktor kapsułkowanie (hermetyzacja) wskaźnik this

Bardziej szczegółowo

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ść 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

Bardziej szczegółowo

Programowanie obiektowe w C++ Wykład 12

Programowanie obiektowe w C++ Wykład 12 Programowanie obiektowe w C++ Wykład 12 dr Lidia Stępień Akademia im. Jana Długosza w Częstochowie L. Stępień (AJD) 1 / 22 Zakresowe pętle for double tab[5] {1.12,2.23,3.33,4.12,5.22 for(double x: tab)

Bardziej szczegółowo

Szablony klas, zastosowanie szablonów w programach

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

Bardziej szczegółowo

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

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,

Bardziej szczegółowo

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

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];

Bardziej szczegółowo

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

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

Bardziej szczegółowo

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

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc Rok akademicki 2016/2017, Wykład nr 4 2/45 Plan wykładu nr 4 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2016/2017

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

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

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Programowanie, część I

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

Bardziej szczegółowo

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 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

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi

Bardziej szczegółowo

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

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27 Programowanie w C++ Wykład 14 Katarzyna Grzelak 3 czerwca 2019 K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27 Na ostatnim wykładzie: Konstruktor standardowy (domyślny) to taki, który nie ma żadnych argumentów

Bardziej szczegółowo

Wykład 8: klasy cz. 4

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

Bardziej szczegółowo

Projektowanie klas c.d. Projektowanie klas przykład

Projektowanie klas c.d. Projektowanie klas przykład Projektowanie klas c.d. ogólne wskazówki dotyczące projektowania klas: o wyodrębnienie klasy odpowiedź na potrzeby życia (obsługa rozwiązania konkretnego problemu) o zwykle nie uda się utworzyć idealnej

Bardziej szczegółowo

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje Zbudujemy klasę Definicję klasy zapiszmy w pliku tstring.h #ifndef TSTRING_H #define TSTRING_H #include // w pliku nagłówkowym NIE // otwieramy przestrzeni std // interfejs private: // implementacja

Bardziej szczegółowo

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

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 Przeciążanie operatorów Słowo

Bardziej szczegółowo

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej

Bardziej szczegółowo

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Historia C++ został zaprojektowany w 1979 przez Bjarne Stroustrupa jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych i

Bardziej szczegółowo

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Inicjalizacja agregatowa zmiennej tablicowej int a[5] = 1,2,3,4,5 INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Struktury są również agregatami, dlatego: struct X double f; char c; X x1 = 1, 2.2, 'c' Ale

Bardziej szczegółowo

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski. - - uzupełnienie notatek: dr Jerzy Białkowski - - 1-2 - - - 1 #include 2 #include 3 # include 4 using namespace std ; 5 6 class Punkt { 7 8 private : 9 double

Bardziej szczegółowo

Przeciążanie operatorów

Przeciążanie operatorów Instrukcja laboratoryjna nr 4 Programowanie w języku C 2 (C++ poziom zaawansowany) Przeciążanie operatorów dr inż. Wilk-Jakubowski Jacek mgr inż. Lasota Maciej dr inż. Kaczmarek Tomasz Wprowadzenie Oprócz

Bardziej szczegółowo

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:

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: 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: typ nw; /* definicja zmiennej nw typu typ */ typ *w_nw; /* definicja

Bardziej szczegółowo

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2 ( $%%) )'20 )*0) 1 / ) Jzyk C++ cz 3 Jarosław Gramacki Instytut Informatyki i Elektroniki # $$%%& ' ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )!" 2 # $$%%& ' ( $%%/,))3 ( %* 2 / 4 ( ( *' *''*,

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 22 XI 2011 Uwaga! Ponieważ już sobie powiedzieliśmy np. o wskaźnikach i referencjach, przez które nie chcemy przegrzebywać

Bardziej szczegółowo

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 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

Bardziej szczegółowo

Wstęp do Programowania 2

Wstęp do Programowania 2 Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 5 W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu:

Bardziej szczegółowo

Operatory na rzecz typu TString

Operatory na rzecz typu TString Operatory na rzecz typu TString Dopiszmy w definicji klasy operator[], dzięki któremu potraktujemy obiekt jak tablicę class TString { public: char& operator[]( size_t n ); const char& operator[]( size_t

Bardziej szczegółowo

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 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

Bardziej szczegółowo

TEMAT : KLASY DZIEDZICZENIE

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ą

Bardziej szczegółowo

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

Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne Przeciążenie funkcji polega na użyciu funkcji z tą samą nazwą, które mają różne listy argumentów(różne typy, różna ilość lub to i inne).

Bardziej szczegółowo

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

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

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

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

Bardziej szczegółowo

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

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17 Wskaźniki Przemysław Gawroński D-10, p. 234 Wykład 2 8 marca 2019 (Wykład 2) Wskaźniki 8 marca 2019 1 / 17 Outline 1 Wskaźniki 2 Tablice a wskaźniki 3 Dynamiczna alokacja pamięci (Wykład 2) Wskaźniki 8

Bardziej szczegółowo

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

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Programowanie w C++ Wykład 8 Katarzyna Grzelak 15 kwietnia 2019 K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 10 I 2012 1 Zabronienie kopiowania Czasami nie ma sensu, żeby obiekty pewnego typu były kopiowane z innych obiektów.

Bardziej szczegółowo

Programowanie Obiektowe i C++

Programowanie Obiektowe i C++ Programowanie Obiektowe i C++ Marcin Benke Instytut Informatyki UW 30.10.2006 Marcin Benke (IIUW) Programowanie Obiektowe i C++ 30.10.2006 85 / 112 Zgodność typów Rozważmy klasy class A { //... }; class

Bardziej szczegółowo

Język C++ wykład VIII

Język C++ wykład VIII Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie,

Bardziej szczegółowo

Lab 9 Podstawy Programowania

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Część 4 życie programu

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ęść

Bardziej szczegółowo

Wskaźniki. Informatyka

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ą

Bardziej szczegółowo

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne Tematyka wykładów 1. Wprowadzenie. Klasy cz. 1 - Język C++. Programowanie obiektowe - Klasy i obiekty - Budowa i deklaracja klasy. Prawa dostępu - Pola i funkcje składowe - Konstruktor i destruktor - Tworzenie

Bardziej szczegółowo

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

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych

Bardziej szczegółowo

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Inicjalizacja agregatowa zmiennej tablicowej int a[5] = 1,2,3,4,5 INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Struktury są również agregatami, dlatego: struct X double f; char c; X x1 = 1, 2.2, 'c' Ale

Bardziej szczegółowo

Przeciążenie operatorów

Przeciążenie operatorów Przeciążenie operatorów W C++ można przeciążyć większość operatory tak, żeby wykonywali zadania, charakterystyczne dla danej klasy Po przeciążeniu odpowiednich operatorów można posługiwać się obiektami

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Tbli Tablice obiektów biktó są tworzone dokładnie d tak samo, jak i tablice, składające się z elementów innego typu

Tbli Tablice obiektów biktó są tworzone dokładnie d tak samo, jak i tablice, składające się z elementów innego typu Tablice, wskaźniki, referencje Tbli Tablice obiektów biktó są tworzone dokładnie d tak samo, jak i tablice, składające się z elementów innego typu #include using namespace std; class cl int

Bardziej szczegółowo

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

Zaawansowane programowanie w języku C++ Klasy w C++ Zaawansowane programowanie w języku C++ Klasy w C++ Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń

Bardziej szczegółowo

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

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

Bardziej szczegółowo

KLASY cz4. Dorota Pylak. destruktory składowe statyczne przeciążanie operatorów. wskaźniki

KLASY cz4. Dorota Pylak. destruktory składowe statyczne przeciążanie operatorów. wskaźniki KLASY cz4. destruktory składowe statyczne przeciążanie operatorów Dorota Pylak wskaźniki 2 Klasy - podsumowanie poznanych wiadomości Deklaracja klasy może zawierać pola, konstruktory oraz metody. W deklaracji

Bardziej szczegółowo

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? 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

Bardziej szczegółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki int getmax (int a, int b) { return (a > b? a : b); float getmax (float a, float b) { return (a > b? a : b); long getmax (long a, long b)

Bardziej szczegółowo

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

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

Bardziej szczegółowo

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 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

Bardziej szczegółowo

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. 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

Bardziej szczegółowo

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

Programowanie 2. Język C++. Wykład 3. 3.1 Programowanie zorientowane obiektowo... 1 3.2 Unie... 2 3.3 Struktury... 3 3.4 Klasy... 4 3.5 Elementy klasy... 5 3.6 Dostęp do elementów klasy... 7 3.7 Wskaźnik this... 10 3.1 Programowanie zorientowane

Bardziej szczegółowo

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

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład I - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Zaliczenie przedmiotu Do zaliczenia przedmiotu niezbędne jest

Bardziej szczegółowo

ZASADY PROGRAMOWANIA KOMPUTERÓW

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.

Bardziej szczegółowo

Podstawy programowania obiektowego

Podstawy programowania obiektowego Podstawy programowania obiektowego Technologie internetowe Wykład 5 Program wykładu Podejście obiektowe kontra strukturalne do tworzenie programu Pojęcie klasy i obiektu Składowe klasy: pola i metody Tworzenie

Bardziej szczegółowo

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30 Programowanie w C++ Wykład 9 Katarzyna Grzelak 14 maja 2018 K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe plus

Bardziej szczegółowo

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

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 20 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32 Programowanie w C++ Wykład 12 Katarzyna Grzelak 20 maja 2019 K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe

Bardziej szczegółowo

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

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu. Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody

Bardziej szczegółowo

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

Operator przypisania. Jest czym innym niż konstruktor kopiujący! Operator przypisania Jest czym innym niż konstruktor kopiujący! Domyślnie jest zdefiniowany jako przypisanie składowa po składowej (zatem niekoniecznie bajt po bajcie). Dla klasy X definiuje się jako X&

Bardziej szczegółowo

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

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury typy złożone- tablice wielowymiarowe, struktury Wykład 6 Deklarowanie wskaźników nazwa_typu * nazwa_wskaznika; WSKAŹNIKI: PRZYPOMNIENIE Przypisywanie wskaźnikom wartości double * pn = &zmienna_typu_double;

Bardziej szczegółowo

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

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ę

Bardziej szczegółowo

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy i obiekty Programowanie i obiekty uzupełnienie notatek: dr Jerzy Białkowski i obiekty 1 2 3 4 i obiekty Obiektowość języka C++ Na tym wykładzie poznamy: ˆ Klasa (w języku C++ rozszerzenie struktury, typ

Bardziej szczegółowo

Podstawy programowania w języku C++

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

Bardziej szczegółowo

Zmienne i struktury dynamiczne

Zmienne i struktury dynamiczne Zmienne i struktury dynamiczne Zmienne dynamiczne są to zmienne, które tworzymy w trakcie działania programu za pomocą operatora new. Usuwa się je operatorem delete. Czas ich występowania w programie jest

Bardziej szczegółowo

Język C++ zajęcia nr 2

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

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 10 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Przesyłanie argumentów - cd Przesyłanie argumentów do funkcji - tablice wielowymiarowe Przekazywanie tablic wielowymiarowych

Bardziej szczegółowo

Programowanie, część I

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

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 8 XI 2 1 Sposoby przekazywania argumentów Powiedzmy, że chcemy napisać funkcję, która zamieni miejscami wartość dwóch

Bardziej szczegółowo

Tablice, funkcje - wprowadzenie

Tablice, funkcje - wprowadzenie Tablice, funkcje - wprowadzenie Przemysław Gawroński D-10, p. 234 Wykład 5 25 marca 2019 (Wykład 5) Tablice, funkcje - wprowadzenie 25 marca 2019 1 / 12 Outline 1 Tablice jednowymiarowe 2 Funkcje (Wykład

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ Programowanie w języku C++ Część dziewiąta Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi

Bardziej szczegółowo

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 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

Bardziej szczegółowo

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

Programowanie obiektowe, wykład nr 6. Klasy i obiekty Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 6 Klasy i obiekty W programowaniu strukturalnym rozwój oprogramowania oparto

Bardziej szczegółowo

Dzisiejszy wykład. Klasa string. wersja prosta wersja ze zliczaniem odwołań. Wyjątki Specyfikator volatile Semafory

Dzisiejszy wykład. Klasa string. wersja prosta wersja ze zliczaniem odwołań. Wyjątki Specyfikator volatile Semafory Dzisiejszy wykład Klasa string wersja prosta wersja ze zliczaniem odwołań Wyjątki Specyfikator volatile Semafory 1 Klasa string Przetwarzanie tekstów jest powszechną dziedziną zastosowań komputerów W języku

Bardziej szczegółowo

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18 Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18 Literatura Języki i paradygmaty programowania Wykład 2 1. C. S. Horstman, G. Cornell, core Java 2 Podstawy, Helion 2003

Bardziej szczegółowo

Wyliczanie wyrażenia obiekty tymczasowe

Wyliczanie wyrażenia obiekty tymczasowe Wyliczanie wyrażenia obiekty tymczasowe Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2013 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu

Bardziej szczegółowo

Język C++ umożliwia przeciążanie operatora, tzn. zmianę jego znaczenia na potrzeby danej klasy. W tym celu definiujemy funkcję o nazwie:

Język C++ umożliwia przeciążanie operatora, tzn. zmianę jego znaczenia na potrzeby danej klasy. W tym celu definiujemy funkcję o nazwie: Rozdział 10 Przeciążanie operatorów 10.1 Definicje Język C++ umożliwia przeciążanie operatora, tzn. zmianę jego znaczenia na potrzeby danej klasy. W tym celu definiujemy funkcję o nazwie: operator op gdzie

Bardziej szczegółowo

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

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład II - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Operacje dyskowe - zapis do pliku #include #include

Bardziej szczegółowo

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

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

Bardziej szczegółowo

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

// Liczy srednie w wierszach i kolumnach tablicy dwuwymiarowej // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib. Wykład 10 Przykłady różnych funkcji (cd) - przetwarzanie tablicy tablic (tablicy "dwuwymiarowej") - sortowanie przez "selekcję" Dynamiczna alokacja pamięci 1 // Liczy srednie w wierszach i kolumnach tablicy

Bardziej szczegółowo

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

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

Bardziej szczegółowo

Programowanie Obiektowo Zorientowane w języku c++ Konstruktory

Programowanie Obiektowo Zorientowane w języku c++ Konstruktory Programowanie Obiektowo Zorientowane w języku c++ Konstruktory Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra

Bardziej szczegółowo

Programowanie i struktury danych

Programowanie i struktury danych Programowanie i struktury danych 1 / 30 STL Standard Template Library, STL (ang. = Standardowa Biblioteka Wzorców) biblioteka C++ zawierająca szablony (wzorce), które umożliwiają wielokrotne użycie. Główne

Bardziej szczegółowo

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 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

Bardziej szczegółowo

Stos liczb całkowitych

Stos liczb całkowitych Stos liczb całkowitych class StosInt int* tab; unsigned size ; StosInt(unsigned s=10) tab=new int[size=s];top=0; ~StosInt()delete[] tab; void push(int i)tab[top++]=i; int pop(void) return tab[--top]; int

Bardziej szczegółowo