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

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

dr inż. Jarosław Forenc

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów.

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

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

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

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

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

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

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

PARADYGMATY PROGRAMOWANIA Wykład 3

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

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

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

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

Wykład 4: Klasy i Metody

Konstruktor kopiujacy

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

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

Wykład 8: klasy cz. 4

Informatyka 2. Wykład nr 3 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

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

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy KONSTRUKTORY

Programowanie obiektowe w języku C++ Zarządzanie procesami. dr inż. Jarosław Forenc. Przeładowanie (przeciążanie) operatorów

PARADYGMATY PROGRAMOWANIA Wykład 4

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

Programowanie obiektowe w C++ Wykład 12

Wstęp do Programowania 2

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

Wstęp do Programowania 2

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

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

Szablony klas, zastosowanie szablonów w programach

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

Rozdział 4 KLASY, OBIEKTY, METODY

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

DYNAMICZNE PRZYDZIELANIE PAMIECI

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

Przeciążenie operatorów

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

Co to jest klasa? Z programistycznego punktu widzenia klasa stanowi typ danych, który odwzorowuje wspólne cechy jakiegoś obiektu.

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

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

Programowanie obiektowe w C++ Wykład 03 Temat wiodący: Konstruktory i deskruktory. Konstruktory i Destruktory

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

PARADYGMATY PROGRAMOWANIA Wykład 2

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

PROGRAMOWANIE OBIEKTOWE W C++ - cz 1. Definicja klasy, składniki klasy, prawa dost pu, definiowanie funkcji składowych, konstruktory i destruktory.

Programowanie Obiektowe i C++

Materiały do zajęć VII

Programowanie obiektowe. Materiały przygotował: mgr inż. Wojciech Frohmberg

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

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

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

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

TEMAT : KLASY DZIEDZICZENIE

Programowanie, część I

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

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

Wykład 5: Klasy cz. 3

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy PRAWA PRZYJACIÓŁ KLASY. Dostęp z zewnątrz: Dostęp z wewnątrz:

Podstawy Programowania Obiektowego

Programowanie obiektowe i C++ dla matematyków

Programowanie Obiektowo Zorientowane w języku c++ Konstruktory

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

Programowanie Obiektowew języku C++ Zadania L4

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

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

Plik klasy. h deklaracje klas

Laboratorium nr 10. Temat: Funkcje cz.2.

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

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

Nowe słowa kluczowe. Komentarze. Wskaźniki typu void. class, delete, new, friend,... /* Komentarz w C i C++ */ // Komentarz w C++ (do końca wiersza)

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Wyliczanie wyrażenia obiekty tymczasowe

ALGORYTMY I STRUKTURY DANYCH

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

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

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

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

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:

Projektowanie klas c.d. Projektowanie klas przykład

Wstęp do programowania

Programowanie Obiektowe i C++

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Programowanie w języku C++

Programowanie obiektowe i C++ dla matematyków

Deklaracja struktury w C++

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

Wskaźniki. Informatyka

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

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

Definiowanie własnych klas

Tablice, funkcje - wprowadzenie

Transkrypt:

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]; char nazwisko[30]; int wiek; class Osoba char* imie; char* nazwisko; int wiek; ; Osoba() Osoba(char i[], char n[], int w); Osoba::Osoba(char i[], char n[], int w) strcpy(imie,i); strcpy(nazwisko,n); wiek = w; ; Osoba(); Osoba(char* i, char* n, int w); ~Osoba(); Osoba::Osoba() imie = new char[1]; imie[0]= \0 ; nazwisko = new char[1]; nazwisko[0]= \0 ; Osoba::Osoba(char* i, char* n, int w) imie = new char[strlen(i)+1]; strcpy(imie,i); nazwisko = new char[strlen(n)+1]; strcpy(nazwisko,n); wiek = w; Osoba::~Osoba() delete [] imie; delete [] nazwisko; dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 2/21

Pamięć dynamiczna new i delete Do zaalokowania pamięci w sposób dynamiczny używamy operatoa new. Zastosowanie tego operatora wiąże się jednak z podjęciem dodatkowych czynności takich jak rozbudowanie destruktora klasy oraz zsynchronizowanie rezerwacji pamięci w konstruktorach z jej zwolnieniem w destruktorze za pomocą operatora delete. Osoba::Osoba(char* i, char* n, int w) imie = new char[strlen(i)+1]; strcpy(imie,i); nazwisko = new char[strlen(n)+1]; strcpy(nazwisko,n); wiek = w; Osoba::~Osoba() delete [] imie; delete [] nazwisko; W przypadku dynamicznego przydzielania pamięci konieczne jest również utworzenie odpowiednich metod, które będą obsługiwały inicjalizację i przypisanie. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 3/21

Pole statyczne klasy Statyczna składowa klasy ma specjalną właściwość polegająca na tym, że program tworzy tylko jedną jej kopię, niezależnie od tego, ile obiektów danej klasy zostanie utworzonych. Innymi słowy pole statyczne klasy jest współdzielone przez wszystkie obiekty klasy. class Osoba static int ileosob; char* imie; char* nazwisko; int wiek; int Osoba::ileOsob = 0; Osoba::Osoba() imie = new char[1]; imie[0]= \0 ; nazwisko = new char[1]; nazwisko[0]= \0 ; ileosob++; int w); ; Osoba(); Osoba(char* i, char* n, ~Osoba(); Osoba::Osoba(char* i, char* n, int w) imie = new char[strlen(i)+1]; strcpy(imie,i); nazwisko = new char[strlen(n)+1]; strcpy(nazwisko,n); wiek = w; ileosob++; Osoba::~Osoba() ileosob--; delete [] imie; delete [] nazwisko; Pole statyczne inicjalizowane jest niezależnie poza deklaracją klasy i poza konstruktorami. Możliwe jest natomiast zainicjalizowanie stałego pola statycznego w deklaracji klasy. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 4/21

Pole statyczne klasy Statyczna składowa klasy ma specjalną właściwość polegająca na tym, że program tworzy tylko jedną jej kopię, niezależnie od tego, ile obiektów danej klasy zostanie utworzonych. Innymi słowy pole statyczne klasy jest współdzielone przez wszystkie obiekty klasy. class Osoba static int ileosob; char* imie; char* nazwisko; int wiek; int Osoba::ileOsob = 0; Osoba::Osoba() imie = new char[1]; imie[1]= \0 ; nazwisko = new char[1]; nazwisko[1]= 0 ; ileosob++; int w); ; Osoba(); Osoba(char* i, char* n, ~Osoba(); Osoba::Osoba(char* i, char* n, int w) imie = new char[strlen(i)+1]; strcpy(imie,i); nazwisko = new char[strlen(n)+1]; strcpy(nazwisko,n); wiek = w; ileosob++; Osoba::~Osoba() ileosob--; delete [] imie; delete [] nazwisko; Pole statyczne inicjalizowane jest niezależnie poza deklaracją klasy i poza konstruktorami. Możliwe jest natomiast zainicjalizowanie stałego pola statycznego w deklaracji klasy. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 5/21

char * Pola składowe imie oraz nazwisko w konstruktorze klasy Osoba są wskaźnikami, a zatem konstruktor musi zaalokować pamięć odpowiednią dla danego łańcucha znaków przekazanego jako argument do konstruktora. Osoba::Osoba(char* i, char* n, int w) imie = new char[strlen(i)+1]; strcpy(imie,i); nazwisko = new char[strlen(n)+1]; strcpy(nazwisko,n); wiek = w; ileosob++; strlen(char*) Funkcja zwraca długość łańcucha (nie uwzględnia końcowego znaku null) strcpy(cel, źródło) Funkcja kopiująca łańcuch znaków. Należy pamiętać, że instrukcja: nazwisko = n spowoduje tylko skopiowanie adresu. Przy czym wskaźnik do łańcucha można przekazać do konstruktora podczas inicjalizacji obiektu: Osoba o( Jan, Kowalski,37); dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 6/21

Konstruktor kopiujący Podczas inicjalizacji jednego obiektu drugim, kompilator automatycznie generuje konstruktor zwany konstruktorem kopiującym. Zadaniem tego konstruktora jest kopiowanie obiektu istniejącego do obiektu nowo tworzonego. Konstruktor ten jest używany podczas inicjalizacji, a nie podczas przypisania. Osoba o1( Jan, Dzik, 47); Osoba o2 = o1; //działa konstruktor kopiujący Osoba o3; o3 = o1; // nie jest używany konstruktor kopiujący Prototyp konstruktora kopiującego: NazwaKlasy(const NazwaKlasy &); dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 7/21

Kiedy działa konstruktor kopiujący? Konstruktor kopiujący zostaje wywołany wówczas, gdy nowo tworzony obiekt jest inicjalizowany istniejącym obiektem tej samej klasy. Osoba o1( Jan, Dzik, 47); Osoba o2 = o1; Kompilator używa konstruktora kopiującego, gdy program generuje kopię obiektu (np. w sytuacji, gdy obiekt przekazywany jest do funkcji przez wartość). void f(osoba o); //funkcja, do której przekazywany jest obiekt przez wartość. Osoba o1( Alicja, Lis, 32); f(o1); Niektóre kompilatory używają konstruktora kopiującego, gdy funkcja zwraca obiekt. Osoba g() return Osoba( Jan, Kowalski,23); dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 8/21

Co robi konstruktor kopiujący? Domyślny konstruktor kopiujący wykonuje tzw. kopiowanie płytkie, tzn. kopiuje tylko do nowotworzonego obiektu wartość każdej niestatycznej składowej kopiowanego obiektu. (Statyczne składowe nie są kopiowane, gdyż należą one do całej klasy, a nie pojedynczych obiektów). class A ; static int i; int x; double y; bool z; A(int _x, double _y, bool _z) x = _x; y = _y; z = _z; a x = 2 y = 4 z = true Zmienna statyczna i nie jest kopiowana. i = 0 b x = 2 y = 4 z = true int A::i = 0; int main() A a(2,4,true); A b = a; //domyślny konstruktor kopiujący Obiekt b jest kopią obiektu a. return 0; dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 9/21

Przykład użycia jawnego konstruktora kopiującego Jeśli klasa zawiera pole statyczne, którego wartość jest zmieniana przez konstruktor (np. zliczanie utworzonych obiektów), wówczas należy zdefiniować w sposób jawny konstruktor kopiujący, który będzie aktualizował pole statyczne. class A ; static int i; int x; double y; bool z; A(int _x, double _y, bool _z) x = _x; y = _y; z = _z; i++; ~A()i--; A(const A & a) //konstruktor //kopiujący i++; x = a.x; y = a.y; z = a.z; int main() A a(2,4,true); A b = a; //działą jawny konstruktor kopiujący return 0; int A::i = 0; dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 10/21

Domyślny konstruktor kopiujący a łańcuchy znaków class B char* tekst; int x; B(char* t, int _x) tekst = new char[strlen(t)+1]; strcpy(tekst,t); x = _x; int main() B b1( Ala ma kota,10); B b2 = b1; return 0; Adres 0xbf858054 ; ~B() delete [] tekst; b1 tekst = 0xbf858054 x = 10 Ala ma kota b2 tekst = 0xbf858054 x = 10 Obiekt b2 jest kopią obiektu b1. Jeżeli pole składowe klasy jest wskaźnikiem do łańcucha znaków, wówczas domyślny konstruktor kopiujący kopiuje jedynie adresy, a nie cały łańcuch znaków. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 11/21

Domyślny konstruktor kopiujący a łańcuchy znaków c.d. class B ; char* tekst; int x; B(char* t, int _x) tekst = new char[strlen(t)+1]; strcpy(tekst,t); x = _x; ~B() delete [] tekst; wypisz() cout << tekst << << x << endl; int main() B b1( Ala ma kota,10); f(b1); b1.wypisz(); return 0; Działanie programu: Ala ma kota 10 10 (ewentualnie wystąpi błąd) void f(b b) // obiekt przekazywany przez wartość b.wypisz(); dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 12/21

Rozwiązanie problemu Jeśli klasa posiada składowe, które są wskaźnikami inicjalizowanymi za pomocą operatora new, wówczas należy napisać jawny konstruktor kopiujący, który skopiuje całe dane wskazywane przez wskaźniki. Jest to tzw. głębokie kopiowanie. class B char* tekst; int x; B(char* t, int _x) tekst = new char[strlen(t)+1]; strcpy(tekst,t); x = _x; B(const B & a) x = a.x; tekst = new char[strlen(a.tekst)+1]; strcpy(tekst,a.tekst); ; ~B() delete [] tekst; dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 13/21

Rozwiązanie problemu c.d. void f(b b) b.wypisz(); int main() B b1( Ala ma kota,10); f(b1); b1.wypisz(); return 0; Argument rzeczywisty Argument formalny (parametr) b1 tekst = 0xbf858054 x = 10 b tekst = 0xbf858098 x = 10 Adres 0xbf858054 Ala ma kota Adres 0xbf858098 Ala ma kota dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 14/21

Problemy z operatorem = Analogiczne problemy, które pojawiają się podczas kopiowania obiektu, mogą się pojawić podczas przypisania jednego obiektu drugim. Operacja przypisania wykonywana jest poprzez operator przypisania (=), który podobnie jak konstruktor kopiujący może być przeciążony przez programistę. Prototyp operatora przypisania: NazwaKlasy & NazwaKlasy::operator=(const NazwaKlasy &); Operator = używany jest wówczas, gdy do utworzonego obiektu przypisujemy drugi, jak w przykładzie poniżej: Osoba o1( Jan, Kowalski, 45); Obiekt o2 = o1; //działa konstruktor kopiujący Osoba o3; o3 = o1; //działa operator przypisania Inicjalizacja obiektu obiektem istniejącym zawsze powoduje wywołanie konstruktora kopiującego, ponadto w niektórych kompilatorach użycie operatora = powoduje wywołanie funkcji operator=. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 15/21

Działanie operatora = Operator przypisania w postaci niejawnej (nieprzeciążonej przez użytkownika) podobnie jak domyślny konstruktor kopiujący kopiuje pola składowe obiektu (poza statycznymi). Jest to również tzw. płytkie kopiowanie, czego konsekwencją będzie wskazywanie tego samego łańcucha znaków poprzez wskaźnik w oryginalnym obiekcie jak i jego kopii. class Osoba char* imie; char* nazwisko; int wiek; Osoba::~Osoba() ileosob--; delete [] imie; delete [] nazwisko; ; Osoba() ; Osoba(char* i, char* n, int w); ~Osoba(); int main() Osoba janek( Jan, Kowalski, 43); Osoba jan; jan = janek; Osoba::Osoba(char* i, char* n, int w) imie = new char[strlen(i)+1]; strcpy(imie,i); nazwisko = new char[strlen(n)+1]; strcpy(nazwisko,n); wiek = w; ileosob++; return 0; dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 16/21

Działanie domyślnego operatora = Po wywołaniu destruktora obiektu janek janek imie = 0xbf234354 nazwisko = 0xbf234390 wiek = 43 jan imie = 0xbf234354 nazwisko = 0xbf234390 wiek = 43 Adres 0xbf234354 Jan Adres 0xbf234390 Kowalski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 17/21

Przeciążanie operatora = Aby uniknąć problemów związanych z operatorem przypisania, należy jawnie zdefiniować funkcję przeciążającą operator =, która wykona tzw. głęboką kopię. Mechanizm działania przeciążonego operatora = jest podobny do konstruktora kopiującego, przy czym należy pamiętać o następujących istotnych uwagach: 1. Obiekt do którego będzie przypisywany drugi może odnosić się do danych, które zostały zaalokowane operatorem new, zatem operator = powinien zwolnić pamięć. 2. W związku z punktem powyższym, nowa funkcja = nie powinna pozwolić na przypisanie do obiektu jego samego. 3. Przeciążony operator = powinien zwracać referencję do obiektu, dzięki czemu możliwe będzie łączenie operatorów =. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 18/21

Przeciążony operator = Osoba & Osoba::operator=(const Osoba & o) //uwaga 3 (funkcja zwraca referencję) if (this == &o) return *this; //uwaga 2 (brak możliwości przypisania obiektu do samego siebie) delete [] imie; delete [] nazwisko; //uwaga 1 (zwolnienie niepotrzebnej pamięci) imie = new char[strlen(o.imie)+1]; strcpy(imie, o.imie); nazwisko = new char[strlen(o.nazwisko)+1]; strcpy(nazwisko, o.nazwisko); return *this; dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 19/21

Metoda statyczna class C ; int C::ile = 0; C::C(int _y) y = _y; licz++; C::~C() licz--; int C::ile() return licz; static int licz; int y; C(int _y); ~C(); static int ile(); Słowo kluczowe static występuje tylko w deklaracji, nie w definicji. Metoda statyczna nie może być wywołana przez obiekt (C++). Do metody statycznej odwołujemy się poprzez nazwę klasy i operator zasięgu :: Metoda statyczna może korzystać wyłącznie z pól statycznych klasy. int main() C c(2); C c(10); cout << Ilość utworzonych obiektów: << C::ile(); return 0; dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 20/21

Dziękuję za uwagę dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ. 21/21