ALGORYTMY I STRUKTURY DANYCH



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

Deklaracja struktury w C++

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

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Wykład 8: klasy cz. 4

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

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

Wstęp do Programowania 2

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

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

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

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

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

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

Wykład 4: Klasy i Metody

Struktury Struktura polami struct struct struct struct

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

Rozdział 4 KLASY, OBIEKTY, METODY

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

Zmienne i struktury dynamiczne

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

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

PARADYGMATY PROGRAMOWANIA Wykład 3

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

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

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

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

Podstawy Programowania Obiektowego

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

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

Szablony klas, zastosowanie szablonów w programach

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

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

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

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

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

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

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

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

Do czego służą klasy?

Część 4 życie programu

Wykład 5: Klasy cz. 3

C-struktury wykład. Dorota Pylak

TEMAT : KLASY DZIEDZICZENIE

Podstawy programowania w języku C++

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

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

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

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Wstęp do programowania obiektowego. Wykład 2

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

Podstawy Programowania Obiektowego

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Wprowadzenie do szablonów szablony funkcji

Do czego służą klasy?

PARADYGMATY PROGRAMOWANIA Wykład 4

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

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

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

Szablony funkcji i szablony klas

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

Wprowadzenie do szablonów szablony funkcji

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

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

Wskaźniki. Informatyka

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

PARADYGMATY PROGRAMOWANIA Wykład 2

C-struktury wykład. Dorota Pylak

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

KLASY cz.1. Dorota Pylak

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

DYNAMICZNE PRZYDZIELANIE PAMIECI

Podstawy programowania - 1

Programowanie w języku C++

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów

Lab 9 Podstawy Programowania

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Język C++ zajęcia nr 2

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

Programowanie, część I

Podstawy programowania obiektowego

Wstęp do programowania

Zmienne, stałe i operatory

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

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

Dziedziczenie. Ogólna postać dziedziczenia klas:

Programowanie komputerowe. Zajęcia 7

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

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.

Co nie powinno być umieszczane w plikach nagłówkowych:

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

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

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

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

Obsługa wyjątków. Język C++ WW12

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

Zofia Kruczkiewicz, ETE8305_2 1

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

Zadania z podstaw programowania obiektowego

Transkrypt:

Akademia Rolnicza im. Augusta Cieszkowskiego w Poznaniu - Instytut Inżynierii Rolniczej - ALGORYTMY I STRUKTURY DANYCH Prowadzący: dr inż. Radosław J. Kozłowski email: rjk@au.poznan.pl www: http://www.au.poznan.pl/~rjk

Struktury podstawy Algorytmy i struktury danych Struktura jest zbiorem logicznie powiązanych ze sobą danych. Struktura to złożony typ danych zbudowany z elementów innych typów (mogą to być typy wbudowane w język jak i zdefiniowane przez programistę).

Struktury podstawy Algorytmy i struktury danych Definicję struktury rozpoczyna słowo struct po nim następuje nazwa struktury (w naszym przykładzie jest to słowo 'punkt'). struct punkt float x; float y; };

Struktury podstawy Algorytmy i struktury danych struct punkt float x; float y; }; Nazwa struktury wykorzystywana jest do deklarowania tzw. zmiennych strukturalnych. W nawiasach klamrowych deklaruje się poszczególne są składowe struktury którymi mogą być zarówno zmienne jak i funkcje.

Struktury podstawy Algorytmy i struktury danych Składowe struktury muszą mieć różne nazwy, co oznacza że nie możemy zdefiniować struktury w ten sposób : struct punkt float x; float x; };

Struktury podstawy Algorytmy i struktury danych Dwie różne struktury mogą mieć składowe o tych samych nazwach. struct punkt float x; float y; }; struct punkt3d float x; float y; float z; };

Struktury podstawy Algorytmy i struktury danych Zmienne strukturalne są tworzone dokładnie w taki sam sposób jak inne zmienne. Jeśli chcemy utworzyć egzemplarz struktury typu punkt piszemy : punkt A; Jeśli chcemy utworzyć całą tablicę punków deklarujemy ją w ten sposób : punkt Punkty[100];

Struktury podstawy Algorytmy i struktury danych Dostęp do zmiennych składowych uzyskujemy dzięki dwóm operatorom : operatorowi kropki oraz operatorowi ->('strzałki'). Kropką posługujemy się wówczas, gdy mamy zmienną lub referencję do struktury np. : punkt A; A.x=1.01; A.y=23.12; cout<<a.x<<' '<<A.y<<endl; &ARef=A; ARef.x=10; ARef.y=9; cout<<a.x<<' '<<A.y<<endl;

Struktury podstawy Deklarację struktury można połączyć z utworzeniem odpowiedniej zmiennej strukturalnej. W tym celu należy umieścić nazwę zmiennej pomiędzy zamykającym nawiasem klamrowym a następującym po nim średnikiem. struct punkt float x; float y; } góralewo, góraprawo;

Struktury - przykład wykorzystania Program obsługujący listy adresowe (Kent Reisdorph Borland C++ Builder 3 ) Rozwiązanie 1: Utworzyć szereg tablic dla imion, nazwisk i pozostałych elementów adresu. Rozwiązanie 2: Utworzyć pojedynczą strukturę grupującą wszystkie pola w jedną spójną całość.

Struktury - przykład wykorzystania Aby móc wykorzystać strukturę, trzeba wpierw zdefiniować jej postać, a następnie utworzyć zmienne, które przechowywać będą rzeczywiste dane. Definicję struktury rozpoczynamy słowem kluczowym struct. Następnie definiujemy poszczególne pola. struct mailinglistrecord char firstname[20]; char lastname[20]; char address[50]; char city[20]; char state[5]; int zip; bool afriend; };

Struktury - przykład wykorzystania Po opisaniu postaci struktury możemy już ją urzeczywistnić. Tworzymy zmienną strukturalną wpisując poniższą linię kodu wewnątrz funkcji main(). mailinglistrecord record; Powyższa deklaracja powoduje zarezerwowanie bloku pamięci oraz utworzenie zmiennej strukturalnej record. Zmienna ta zawiera wszystkie pola wchodzące w skład struktury.

Struktury - przykład wykorzystania Wypełnienie zmiennej możemy dokonać wykorzystując funkcję strcpy(). strcpy(record.firstname, Jan ); strcpy(record.lastname, Kowalski ); strcpy(record.address, Polna 22 ); strcpy(record.city, Poznan ); strcpy(record.state, Wielkopolska ); record.zip = 64444; record.afriend = true;

Struktury - przykład wykorzystania Lub bezpośrednio podczas deklaracji: mailinglistrecord rec = Jan, Kowalski, Polna 22, Poznan, Wielkopolska, 64444, true };

Struktury - przykład wykorzystania 01: #include <condefs.h> 02: #include <iostream.h> 03: #include <conio.h> 04: #pragma hdrstop 05: #include "structur.h" 06: void displayrecord(int, mailinglistrecord mlrec); 07: int main(int, char**) 08: // utwórz tablicę struktur typu mailinglistrecord 09: mailinglistrecord listarray[3]; 10: cout << endl; 11: int index = 0; // wprowadź trzy rekordy 12: do 13: cout << "Imię: "; 14: cin.getline(listarray[index].firstname,sizeof(listarray[index].firstname) - 1); 15: cout << "Nazwisko: "; 16: cin.getline(listarray[index].lastname,sizeof(listarray[index].lastname) - 1); 17: cout << "Ulica i nr domu: "; 18: cin.getline(listarray[index].address,sizeof(listarray[index].address) - 1); 19: cout << "Miasto: "; 20: cin.getline(listarray[index].city,sizeof(listarray[index].city) - 1); 21: cout << "Stan: "; 22: cin.getline(listarray[index].state,sizeof(listarray[index].state) - 1); 23: char buff[10]; 24: cout << "Kod pocztowy: "; 25: cin.getline(buff, sizeof(buff) - 1); 26: listarray[index].zip = atoi(buff); 27: index++; 28: cout << endl; 29: } 30: while (index < 3); 31: clrscr(); // wyczyść ekran 32: for (int i=0;i<3;i++) // wyświetl trzy rekordy 33: 34: displayrecord(i, listarray[i]); 35: } // zapytaj użytkownika o numer rekordu 36: cout << "Podaj numer rekordu: "; 37: int rec; // czy podano właściwy numer? 38: do 39: rec = getch(); 40: rec -= 49; 41: } while (rec < 0 rec > 2); // przepisz rekord do tymczasowej struktury 42: mailinglistrecord temp = listarray[rec]; 43: clrscr(); 44: cout << endl; // wyświetl rekord 45: displayrecord(rec, temp); 46: getch(); 47: return 0; 48: } 49: void displayrecord(int num, mailinglistrecord mlrec) 50: 51: cout << "Rekord " << (num + 1) << ":" << endl; 52: cout << "Nazwisko: " << mlrec.firstname << " "; 53: cout << mlrec.lastname; 54: cout << endl; 55: cout << "Adres: " << mlrec.address; 56: cout << endl << " "; 57: cout << mlrec.city << ", "; 58: cout << mlrec.state << " "; 59: cout << mlrec.zip; 60: cout << endl << endl; 61: }

Struktury - przykład wykorzystania Dołączony plik nagłówkowy z definicją struktury #ifndef _STRUCTUR_H #define _STRUCTUR_H struct mailinglistrecord char firstname[20]; char lastname[20]; char address[50]; char city[20]; char state[5]; int zip; }; fragment kodu (tzw. strażnik, sentry) mający na celu sprawdzenie czy dany plik został już włączony do programu. #endif

Struktury - przykład wykorzystania 01: #include <condefs.h> 02: #include <iostream.h> 03: #include <conio.h> 04: #pragma hdrstop 05: #include "structur.h" 06: void displayrecord(int, mailinglistrecord mlrec); 07: int main(int, char**) 08: // utwórz tablicę struktur typu mailinglistrecord 09: mailinglistrecord listarray[3]; 10: cout << endl; 11: int index = 0; // wprowadź trzy rekordy 12: do 13: cout << "Imię: "; 14: cin.getline(listarray[index].firstname,sizeof(listarray[index].firstname) - 1); 15: cout << "Nazwisko: "; 16: cin.getline(listarray[index].lastname,sizeof(listarray[index].lastname) - 1); 17: cout << "Ulica i nr domu: "; 18: cin.getline(listarray[index].address,sizeof(listarray[index].address) - 1); 19: cout << "Miasto: "; 20: cin.getline(listarray[index].city,sizeof(listarray[index].city) - 1); 21: cout << "Stan: "; 22: cin.getline(listarray[index].state,sizeof(listarray[index].state) - 1); 23: char buff[10]; 24: cout << "Kod pocztowy: "; 25: cin.getline(buff, sizeof(buff) - 1); 26: listarray[index].zip = atoi(buff); 27: index++; 28: cout << endl; 29: } 30: while (index < 3); 31: clrscr(); // wyczyść ekran funkcja getline() pobierająca całą linię z dowolnego urządzenia wejściowego funkcja atoi() konwertująca char na int

Struktury - przykład wykorzystania Fragment kodu określający numer rekordu wybranego przez użytkownika. Ponieważ rekordy w tablicy numeruje się od 0, instrukcja cyklu do-while pobiera kod danego klawisza 1-3 a następnie odejmuje kod ASCII znaku 1 czyli 49. 32: for (int i=0;i<3;i++) // wyświetl trzy rekordy 33: 34: displayrecord(i, listarray[i]); 35: } // zapytaj użytkownika o numer rekordu 36: cout << "Podaj numer rekordu: "; 37: int rec; // czy podano właściwy numer? 38: do 39: rec = getch(); 40: rec -= 49; 41: } while (rec < 0 rec > 2); // przepisz rekord do tymczasowej struktury 42: mailinglistrecord temp = listarray[rec]; 43: clrscr(); 44: cout << endl; // wyświetl rekord 45: displayrecord(rec, temp); 46: getch(); 47: return 0; 48: } 49: void displayrecord(int num, mailinglistrecord mlrec) 50: 51: cout << "Rekord " << (num + 1) << ":" << endl; 52: cout << "Nazwisko: " << mlrec.firstname << " "; 53: cout << mlrec.lastname; 54: cout << endl; 55: cout << "Adres: " << mlrec.address; 56: cout << endl << " "; 57: cout << mlrec.city << ", "; 58: cout << mlrec.state << " "; 59: cout << mlrec.zip; 60: cout << endl << endl; 61: }

Struktury - przykład wykorzystania zmiennej temp przypisanie zawartości jednej ze struktur z tablicy listarray 32: for (int i=0;i<3;i++) // wyświetl trzy rekordy 33: 34: displayrecord(i, listarray[i]); 35: } // zapytaj użytkownika o numer rekordu 36: cout << "Podaj numer rekordu: "; 37: int rec; // czy podano właściwy numer? 38: do 39: rec = getch(); 40: rec -= 49; 41: } while (rec < 0 rec > 2); // przepisz rekord do tymczasowej struktury 42: mailinglistrecord temp = listarray[rec]; 43: clrscr(); 44: cout << endl; // wyświetl rekord 45: displayrecord(rec, temp); 46: getch(); 47: return 0; 48: } 49: void displayrecord(int num, mailinglistrecord mlrec) 50: 51: cout << "Rekord " << (num + 1) << ":" << endl; 52: cout << "Nazwisko: " << mlrec.firstname << " "; 53: cout << mlrec.lastname; 54: cout << endl; 55: cout << "Adres: " << mlrec.address; 56: cout << endl << " "; 57: cout << mlrec.city << ", "; 58: cout << mlrec.state << " "; 59: cout << mlrec.zip; 60: cout << endl << endl; 61: }

Funkcje jako elementy struktury struct Data int dzien, miesiac, rok; void Fdrukuj(); Data(); }; //Definicja struktury //Prototyp funkcji //Konstruktor struktury void Data::Fdrukuj() //Definicja funkcji char *mon[] =... }; cout << dzien << ". " << mon[miesiac-1] << ". " << rok; } Data::Data(void) //Początkowa data - Konstruktor dzien = 3; miesiac = 11; rok = 1979; } int main() Data NStruktura; //Inicjujemy strukturę cout << "\n Sprawdzamy: "; NStruktura.Fdrukuj(); //Wywołanie funkcji cout << " = "; cout << NStruktura.dzien << ". " << NStruktura.miesiac << ". " << NStruktura.rok; (...) return 0; }

Konstruktory (1/6) Algorytmy i struktury danych W C++ stosuje się praktykę inicjowania zmiennych, a nie tylko ich alokowania. Do inicjacji zmiennych służą konstruktory. Konstruktor to związana automatycznie z daną strukturą funkcja o nazwie identycznej z nazwą struktury. Konstruktory uruchamiane są automatycznie w chwili tworzenia egzemplarza struktury (zmiennej strukturalnej). Konstruktory pomagają unikać błędów związanych z niezainicjowanymi danymi.

Konstruktory (2/6) #include <iostream.h> #include <assert.h> struct punkt float x; float y; punkt (float xx, float yy) x=xx; y=yy; } }; int main() punkt *aptr=new punkt(10,20); assert(aptr!=0); cout<<aptr->x<<' '<<aptr->y<<endl; delete aptr; aptr=0; return 0; }

Konstruktory (3/6) Linie : punkt (float xx, float yy) x=xx; y=yy; } to konstruktor struktury. Składowym x i y struktury przypisujemy wartości podane w momencie tworzenia struktury.

Konstruktory (4/6) (operatory new i delete) #include <iostream.h> #include <assert.h> struct punkt float x; float y; punkt (float xx, float yy) x=xx; y=yy; } }; int main() } punkt *aptr=new punkt(10,20); assert(aptr!=0); cout<<aptr->x<<' '<<aptr->y<<endl; delete aptr; aptr=0; return 0;

Konstruktory (5/6) (operatory new i delete) W powyższym programie użyte zostały dwa operatory new i delete. punkt *aptr=new punkt(10,20); Operator new tworzy automatycznie obiekt o odpowiedniej wielkości*, wywołuje odpowiedni konstruktor i zwraca wskaźnik właściwego typu**. * w powyższym przykładzie jest to obiekt wielkości struktury point ** w powyższym przykładzie jest to wskaźnik do struktury typu point Jeśli z jakiś powodów nie można zaalokować wystarczającej ilości pamięci to (w zależności od wieku kompilatora) albo zwracany jest wskaźnik o wartości 0 (NULL), albo generowany jest wyjątek bad_alloc [1].

Konstruktory (6/6) (operatory new i delete) Jeśli nie potrzebujemy już pamięci zarezerwowanej za pomocą operatora new możemy ją zwrócić systemowi operacyjnemu za pomocą operatora delete. Bardzo ważne jest właściwe korzystanie z tych operatorów. Jeśli alokujemy pamięć dla tablicy np.: int *intptr=new int [100]; należy ją zwolnić korzystając z operatora delete w ten sposób : delete [] intptr;

Destruktory (1/2) Destruktor jest funkcją wywoływaną w czasie likwidacji zmiennej strukturalnej. Destruktor jest funkcjonalnym przeciwieństwem konstruktora. Do jego zadań należy najczęściej zwalnianie zasobów wykorzystywanych przez zmienną strukturalną. Deklarowanie Destruktora nie jest konieczne (zostanie on utworzony automatycznie), jednak definiować można go tylko raz. Destruktor jest funkcją bezparametrową i nie zwracającą wartości.

Destruktory (2/2) struct Rect int wysokosc=5, szerokosc=5; Rect(); //konstruktor ~Rect(); //destruktor }; Rect()::~Rect() cout << Teraz działa destruktor } main() Rect A; delete A; } deklaracja Destruktora definicja Destruktora wywołane Destruktora

Hermetyzacja (1) Hermetyzacja mechanizm pozwalający na ochronę danych zawartych w elementach składowych struktury przed dostępem funkcji z zewnątrz struktury. Zasady dostępu określa się w C++ przy pomocy słów: public - publiczny, dostępny, protected - chroniony, dostępny z ograniczeniami, private - niedostępny spoza struktury.

Hermetyzacja (2) #include "iostream.h" struct Zwierzak private: int schowek; //DANE PRYWATNE - niedostępne public: void SCHOWAJ(int Xwe);//Funkcje dostępne z zewnątrz int ODDAJ(void); }; void Zwierzak::SCHOWAJ(int Xwe) //definicja funkcji schowek = Xwe; } int Zwierzak::ODDAJ(void) return (schowek); } main() Zwierzak Ciapek, Azor, Kotek; // Struktury "Zwierzak" int Piggy; // zwykla zmienna Ciapek.SCHOWAJ(1); Azor.SCHOWAJ(22); Kotek.SCHOWAJ(-333); Piggy = -4444; cout << "Ciapek ma: " << Ciapek.ODDAJ() << "\n"; cout << "Azor ma: " << Azor.ODDAJ() << "\n"; cout << "Kotek ma: " << Kotek.ODDAJ() << "\n"; cout << "Panna Piggy ma: " << Piggy << "\n"; return 0; }

Hermetyzacja (3) Próba nieautoryzowanego dostępu do danych prywatnych zmiennej: cout << Ciapek.schowek; printf("%d", Ciapek.schowek); nie powiedzie się, kompilator wyświetli komunikat o błędzie: Error: 'Zwierzak::schowek' is not accessible in function main() atrybut schowek zmiennej strukturalnej typu Zwierzak (np. Ciapek) nie jest dostępne z wnętrza funkcji main().