1- Do geggalnjyj nagyinpcfc^i pnHłaiianic danych? PAawanie" razem pa wiązanych ze scbądmycb iprocetkr nazywa się Immcfraitjątdbo miaąjsudcrją. Jest ta nrtirafae razwńięde strategii przesłaniania danych dla ich ocłrauy przed modyfikacją. Technika cbiektowa udo&ouala ten proces.
Dor wnmtjfn obiekiu sq dostępne tyłka dki metod lego obietou. Wymiana ńfarmacji cparta na kammicatacb oferuje dwa ważne systemy zabezpieczeń. Pa pierwsze zabezpiecza zmienne obiektu przed naruszeniem przez inne abiddy. Zmienne mogą być obsługiwane tyka przez dziekt da którego należą Obiekt przesłania czylibermetyztge swoje zmienne pcęrzez swoją definicje w klasie. Drugie zabezpieczenie jest mniej oczywiste ale obecne. Działa cna w przeciwnym kimiriai. Cbiekt zabezpieczając swoje zmiecne oszczędza knym obiektom konieczności śledzenia jego zmiennych. Obiekt musityka „wiedzieć' jak zą>jtać feny obiekt a informację. Praechowywazie i przetwarzanie ńformacji w obiekcie pytaiym jest poza polem widzenia cbiektupytającego.
Hermctyzacja jest więc w sdjowariem zmiennych i metod cbiektu pod jego nazwą
Jest powoływany do żyda wraz z jego definicją Oznaczało ze żądamy w tym miej soi by koną>ilatcr zarezerwował w pamięci obszar na tą zmienna - czy li powołał ją do żyda.
DeJd ararj a fanstmfócra: clas klasa
i
pub He:
klasaO; 4r kantstruktor cknnniemany
)
Oefirója kzistnJćara:
Cclass.-.-CclssO
(
)
Klasa jest nowym typem zmiennej w programie. Jest to zbiór obiektów nie koniecznie tego samego typu. Definiujemy ją jako: dass nasra Maset
f
//ciało klasy
1;
Funkcja zawarta wewnątrz klasy ta metodą natarmad zmienna zawarta wewngrz klasy to pale.
Klasa nie definiuje obiektów! Jest ora typem obiektu, a nie obiektem.
5Jla aa winna być, w Brearamto daitruktorón?
Zależnie od zamysłów programisty (Obecność konstruktora i destruktora jest opcjonalna tj. nie jest mezbęckia-tyle arna ca kemstnkterów dynamicznie przydzielających pamięć za pomocą cąieratoranew)
Metody obiektów to inaczej funkcje składowe. Funkcje zadeklarowane wewnątrz definicji klasy są składnikami tej klasy. Nazywamy je funkcjami składowymi. Funkcje te mają zakres klasy, w której je zadeklarowaliśmy. Funkcjeskfedowe mają pełny dostąp do wszystkich składników swojej klasy. Funkcja składowa jest jakby na rząd ziem, za pomocą którego dokonujemy operacji na danych składowych klasy. Szczególnie na tych składnikach, które są prhrate i tym samym spoza klasy niedostępne.
7. Kiedy w pcujlraiif wystąp koostiuktu doniipmH^y i ma
pratar?
W programie wystąpikastruktar domniemany wtedy, gdy programista sam go zdefiniuje łub w przypadku, gdy klasa nie posiada ani jednego konstruktora, wówczas kaiupibi ci sam wygeneruje sobie clla tej klasy k«Etnif ar donnie many. KotEtiuktcrr dci mniemany jest ta kanstniter, który można wywołać bez żadnych argumentów. Przjkfadowa p ostać kenstnit ora daninie marę go: class Lalka {
pubKc:
Laka (diai ♦obiekt 1 = NULL, kź abkkl_2 = 20);
ł;
Jest to stosowa nie obiektu jako argumertu funkcji zadanego przez podstawienie z pliku nagłówkowego. Obiekt inicjalizował się jako kopia wewnątrz funkcji. Przy obiektach o skomplikowanej budowie nie jest to dobry sposób, bo tworzenie kopii obiektu wewnątrz funkcji musi trwać odpowiednio długo.
Przesyłanie przez referencją działa tak samo jak dla wszystkich innych zmienr^ch w programie. Referencja działa jak przezwiska zmiennej pokazujące, gdzie jej szukać. Nie jest tworzona kopia zmiennej w funkcji, a tylko podawane miejsce jej dokowania.
1<L Cc tu »|jłtaJnjb klasy?
Wewnątrz ciała klasy deklaruje się składniri klasy. Sktaffrrilraini klasy megąbyć różnego rodzaju tjpy daiych nazywane palami (sąto debrze max z mierne). Składnia klasy mażemy umieścić w 3 sekcjach private, public, protected. Wybór sekcji zależy ad tego, ca zamierzamy zrobić z klasa. Gdy umieścimy Ahdmbiw sekcji prwale nńemażKwimy tym używanie ich poza klasą W sekcji ptblic składnia tam umieszracne będą mogły być używane przez wszystkie funkcje i składniej. Składniej w sekcji put ected mogą być używane przez składnia jego klasy, JGmkcje zapzyjaźnione oraz składaki jego klas p ochockiej.
IŁ i* fliiełai fiajaBiŁndafi May»łanie at mfcauik tfis?
Wskaż mk tkis stosuje się da fidccjiskładowych. Wskaźnik fłris stający przed składakiem klasy spawia, że operacje przejrawadzene sąna skłackik ach tego (this) k cnki-etn ega egzemplarza cbiektu, dla ktckego tę frakcję wywołaliśmy. WAaźnik ten pokazuje Hukcji, na ktcfeymkskrętnym egzemplarzy tej klasy, ma funkcja teraz p arować.
Wskaźnik this jest wstawiany we właściwe miejsce poza nasza wiedzą. Jest to wskaźnik stały czyli typu: conat*
pwtgrtri;
Jeśli klasa ma etykietą prhrato, to jej składniki bądą dostępne tylko w zakresie wnętrza klasy. Jeśli etykieta jest yurbJfc, to składniki klasy mogą być wywoływane także spoza tej klasy. Etykietami możemy określać także dostąp do wybranych składników klasy wybiórczo. Wtedy privatei public mają sens podany wyżej. Dodatkowo stosuje się wówczas etykietą protoctod. Oznacza ona, że ta ki składnik jest dostępny tylko w ramach dziedziczenia tj. w klasach, które są potomkami klasy zawierającej ten składnik. Jeśli etykiet nie ma, to w trybie domyślnym skbdniki klasy są private. Tak wiec etykiety wfaśnie zapewniają ram ochroną składników klasy. Dane najczęściej umieszczamy w klasach chronionych, czyli private. Do ustawiania wartości i pobierania danych korzystamy z funkcji składowych klasy. To do nich stosujemy etykiety ochrony.
IŁ Co tn jat fcrastrnktor ktykijgty. Podaj piyUad. Konstruktor może zamiast definiować obiekty podawać kopie obiektów zawartych w innej klasie Wtedy jest to tak zwany konstruktor kopiujący. Służy on do tworzenia nowego obiektu w oparciu o obiekt, który już istnieje wśród obiektów klasy. Pozostałe argumenty konstruktora są domniemane. Przyktadami konstruktora kopiującego mogą być:
X::X(X&} lub X::X(X&, float=3.14.15, int=0)
- Konstruktor taki wprowadza obiekty identyczne z już istniejącymi, czyli ich kopie.
-Taki konstruktor maże być wywołany przez program niejawnie:
W sytuacji, gdy dofmkcji jest przez wartość przesyłany obiekt klasy X. Wówczas tworzona jest kopia tego obiektu.
W sytuacji, kiedy funkcja zwraca przez wartość obiekt klasy X. Wtedy także tworzona jest kopia obiektu.
-To, że konstruktor kopiujący podaje obiekt kopiowany przez referencją da je mu możliwość zmiany obiektu klasy!!
14. Kiedy fiuikcifl układowa Uay będzie traktowała iriko funkcja
Iolioe oznacza ze w momenc ie pojawienia się nazwy fiiAcji w programie, Habcja nie zcEtanic wywołana, lecz jej ciało zcEtanic wpisane w linie, w której wywołanie nartąpiło. Finkcja będzie inłine wtedy, gdy dała furdaji jert krótkie oraz gdy z tej samej funkcji chcemy korzystać wiek razy.
15. Do czego stułą I |ak itoiuja mig operatory naw Iriitoto?
Jak pamiętamy przy operowaniu tablicą w programie rozmiar tej tablicy musi być znany w momencie kompilacji. Wynika to z konieczności rezerwacji obszaru pamięci odpowiedniego do liczby elementów tablicy. Wygodniej byłoby operować rozmiarem tablicy po uruchomieniu programu, a nie w toku kompilacji. Umożliwia to operator new.
Operator new ten służy do dynamicznego przydzielania (alokacji) pamięci.
Operatorde/ete usuwa obiekty ze sterty pamięci dynamicznej i tym samym zwalnia pamięć.
Stosujemy go następująco:
Definiujemy wskaźnik : char +wsk;
Następnie stosujemy instrukcje przypisania : wdr =
naw char;
Powoduje ora utworzenie nowego obiektu typu znakowego. Nie ma on nazwy, ale jego adres jest przypisany do wskaźnika wsfc.
Usuwamy go instrukcją : dobita wsk;
nagłówkowe?
Pliki nagłówkowe dołączamy do programu pa ta, Ay mac kerzyrtać z wcześniej utwer zonęj klasy. Tworzymy je pcęrzez zdeklarowanie wszystkich obiektów i metod które sąwykcrzystywane w klasie.
17. to tu łut funtoto.aamzyUintanaZ
Funkcja zaprzyjaźniona z klasą to funkcja, która (mimo, że nie jest składnikiem klasy} ma dostęp do wszystkich (nawet prywatnych} skfadników klasy. Zwykle wewnątrz klasy funkcja jest tylko deklarowana. Jest to jedynie deklaracja przyjaźni i tyle. Nie ma znaczenia, w którym miejscu klasy (public, prKrate czy protected) taka deklaracja nastąpifa. Słowa public, provate i protected nie mają na to wpływu. To takie funkcje, które; mimo, że nie sąskbdnikami klasy, to mają dostęp do jej skbdników, czyli innych funkcji, zmiennych i obiektów. Mają dostęp także do tych składników klasy, które są hermetyzowane etykietą privats. Funkcja zaprzyjaźniona jest wprowadzana instrukcją Mend. Cochy funkcji zaprzyjaźnionych:
-Funkcja może być zaprzyjaźniona z kilkoma klasami.
- Na argumentach jej wywołania może wykonywać operacje zgodnie ze swoją definicją.
- Może być napisana w zupełnie innym języku niż C4-+ i dlatego może nie być funkcją składową klasy.
- Ponieważ firtkeja typu Mend nie jest sktednikiem klasy to nie ma wskaźnika this, czyli musi się posłużyć operatorem wskaźnika, albo przypisania, aby wykonać działania (także te na składniku klasy, z którą jest zaprzyjaźniona).
-Jest deklarowana w klasie ze słowem instrukcji Mend i nie podlega etykietom hermetyzeji [public, private, protected).
- Może być cab zdefiniowana w klasie i wtedy jest typu iniine ale radal jest funkcją zaprzyjaźnioną.
- Nie musi być funkcją składową żadnej klasy, ale może nią być.
- Klasa może się przyjaźnić z wieloma funkcjami, które są lub nie są składnikami innych klas.
-Funkcje zaprzyjaźnione nie są przechodnie, to znaczy, że „przyjaciel mego przyjaciela nie jest moim przyjacielem1', czyli zaprzyjaźnienie nie przenosi się od klasy do klasy.
-Za przyjaźnienie nie pod lega mechanizmowi dziedziczenia.
-Z zasady umieszcza się funkcje zaprzyjaźnione na początku wszystkich deklaracji w klasie.
lBJalda aldadiUkl Mam mm być knplowana aa
pomocą
to nitru klara topluk«oo?
Maże kopiować cde obiekty, wszystkiej jego składniki z wyjąkiera; Nie można pominąć referencji w kcmstiuktcrze kopiującym, ba gdyby obiekty swojej klasy X konsliuktci X wywoływał [rzez wartość czyK wytwarzałby swoją kapię ta powstaje nie zanbnięta pętla twerzenia kopii Konstruktor z przyczyn logiki języka otrzymuje więc waunki da Uga aby isikadzić oryginał!! Zabezpieczamy się przed taką sytuacją następująco:
X::X(cacfitX&cbiekt) Teraz kacstnictar X wie, że abidkt klasy X nuń być wywoływany jaka stały. Kanstnidar kopiujący nic może odbierać obiektu przez wotaść.
18. C.iy ftinhjfl ingiyjainiaifl jnt i rani hif tMalnŁiria May?
Funkcja zaprzyjaźniała maże być zwykłą fiibcją, a maże być też fimkcją Ahdawą zupełnie innej klasy. Oczywiście ma wtedy dcEtęp do jiywalnych składników klasy, a także tej, z która się przyjaźni
20. WlłUm.calu twa rżymy aoramly?
Klasą która nie posiada metod, czyli fimkcji Aładowych, ani jawnego kengnktera i której wszystkie Ahdnkisąpiblkme bywa nazywana agregatem. Jest to zbiór zmiennych różnych typów tworzących zestaw danych Jego elementy t Aże mogą być obiektami. Utwórzmy obiekt zawierający imię i wiek osoby i wydrukujmy zgromadzane dane na ekran.
2L Co odróżnia agreftatod innych klas obiektów?
Agregat jest ta klasą która nie posiada metod ani jawnego kcnrtnAtcrai jej wszystkie Ahckiiki są publiczne.
22. Natjyrapdega pncriaiaiicmuratora? Podaj pnyhlad?
Jeżeli na liście argumentów formalnych mamy ca najimiej dwa argumenty, w tym jeden utworzony przez programistę, ta funkcje możemy wywołać do działania nie tylko pcpzez jej nazwę. Mażemy utworzyć cperrfar wstawimy pomiędzy argumerty Atnałne funkcji który wywoła jąda działania. Przeciążenie optrrfara dokonuje się więc def knując własną funkcje która:
a. nazywa się operator! - gdzie ! jest symbolem operatora oktekega przeciążenie nam chodzi(np.: +, *, /,», «,itp.)
b. jaka ca aqnniej jeden z argumentów, przyjmuje cbiAt danej klasy. Musi ta być cbiekt, nie maże być wskaźnik do obiektu.
Przykład przeciążenia operat era
DAlaracja lakapHm nagłówkowym klasy Laka:
friend CLaka cper«tor+(Cl^ka obiekt _1, int liczba);
Definicja:
CLaka operatorr(CLaka cbiekt l, int liczba)
i
CLaka rezultat^
rezultat2wzxcEt = cbiekt_lwzrast + liczbą rtfiro rezultat2;
}
Destruktorem klasy o nazwieX jest funkcja o nazwie X. Jej deklaracja nie jest konieczna. Za każdym razem, gdy jest likwidowana klasa X automatycznie uruchamiany jest destruktor. Destruktor nie likwiduje jednak obiektów ani nie zwalnia fizycznie pamięci operacyjną, która była zajmowana przez składniki klasy X. Przygotowuje on natomiast składniki klasy X do likwidacji prowadząc do zablokowania ich czynności lub dostępu do nich. Jeśli konstruktor lub obiekt klasy posługiwał się operatorem new w celu dynamicznego przydzielenia pamięci, to destruktor powinien zawierać operator dełete. Jako firtkeja destruktor nie maże zwracać żadnych wartości.
Musi być wywoływany bez argumentów, czyli nie może być przeładowany. Jest uruchamiany automatycznie wtedy, kiedy obiekt wychocki ze swojego zakresu ważności, poza sytuacją, kiedy obiekt jest typu static. Taki obiekt jest likwidowany destruktorem po zakończeniu programu. Także wówczas, gdy obiekt jest wywoływany przez referencje lub wskaźnik wyjście obiektu z jego z zakresu ważności nie uruchamia destruktora.
Konitniktiin
1. Konstruktor NIE MUSI wystąpić w opisie klasy, czyli obiekty nie muszą być wprowadzane konstruktorem.
2. Nazwa konstruktora może być przeciążana, czyli stosowana wielokrotnie w opisie klasy z różnymi listami argumentów. Wtedy kompilator odnóżnia konstruktory po listach a ng u meritów, tak, jak w przypadku przeciążonych nazw funkcji.
3. Konstruktor może być wywoływany (a nie deklarowany!!} bez żadnych argumertów. Jest to tak zwany konstruktor domniemany. Czasem nazywamy go domyślnym albo standardowym. Ze względu na istotę