Professional Documents
Culture Documents
uteshjtesdhtse7564ngdsgfdsh6tre6jh6457suyegre75uy5thtesiuj6tnstsftygthrsrdfshdrtfsdrtthjfghgdfhgfdhgfdhgdfh hgfdj756ei8u5ij7cdsfcfdsfdsfsdfdsfdsfdafafadfadfadfadfdayrtirty7jktryf7trkiyfiykfsdafsdfsdafsdjdtyroik5w384gf
uteshjtesdhtse7564ngdsgfdsh6tre6jh6457suyegre75uy5thtesiuj6tnstsftygthrsrdfshdrtfsdrtthjfghgdfhgfdhgfdhgdfh hgfdj756ei8u5ij7cdsfcfdsfdsfsdfdsfdsfdafafadfadfadfadfdayrtirty7jktryf7trkiyfiykfsdafsdfsdafsdjdtyroik5w384gf
62. W jaki sposób definiuje się tablice i w jaki sposób przekazuje się je do funkcji (przykłady)?
Tablica to ciąg obiektów tego samego typu, które zajmują ciągły obszar w pamięci. Tablice są typem pochodnym czyli biorąc typ int tablica
będzie typy int.
Tablice przesyła się podając funkcji tylko adres początku tej tablicy. Nazwa tablicy jest równocześnie adresem zerowego jej elementu.
definicja np. int liczba[20];
63.Co pojawi się na ekranie monitora w wyniku wykonania fragmentu programu …..
int *t;
int rozmiar;
cin>>rozmiar;
t = new int[rozmiar];
lub
int rozmiar;
cin>>rozmiar;
int t[rozmiar];
66.Podaj przykład definicji struktury. W jaki sposób mamy dostęp do elementów składowych struktury?
Struktura- Struktura jest typem zawierającym w sobie zmienne dowolnego typu (tzw. pola). Struktura umożliwia zapakowanie
powiązanych ze sobą logicznie danych w jednym obszarze pamięci, który może być przesyłany jako jeden argument.
Struktura w języku C++:
Struktury w C++ są deklarowane tak jak w C, jednak oprócz pól mogą zawierać także funkcje (tzw. Metody) i mogą dziedziczyć z innych
klas i struktur. Struktura różni się w C++ od klasy wyłącznie domniemanym zakresem widoczności jej pól i metod - dla klasy jest to private
a dla struktur public. Używanie struktur zamiast klas nie jest jednak dobrą praktyką programowania gdyż zaciemnia budowę programu.
/* deklaracja */
struct miasto {
long ludnosc;
char* rzeka;
miasto(long ludnosc,char *rzeka):
ludnosc(ludnosc), rzeka(strdup(rzeka)) {}; /*konstruktor*/
inline char* wez_rzeke() {return rzeka};
~miasto() {free( (void*)rzeka );} /*destruktor*/
};
W takich strukturach dostęp do składowych podstawowych wykonuje się przy pomocy operacji:
*Definicja klasy: Definicja klasy zawiera dwie części: nagłówka składającego się ze słowa kluczowego class, po którym następuje nazwa
klasy oraz z ciała klasy ograniczonego parą nawiasów klamrowych i zakończonego średnikiem.
class TPunkt
{
};
*Tworzenie obiektów: To co było do tej pory napisane odnosiło się do klasy, czyli naszego przepisu na stworzenie obiektu. Sam proces
tworzenia obiektu nazywamy instancjonowaniem lub konkretyzacją klasy. Tworzenie obiektów dokonuje się tak samo jak tworzenie
zmiennych. np.
//nazwa_klasy nazwa_instancji
int i; //zmienna typu int o nazwie i
TPunkt p1; //obiekt klasy TPunkt o nazwie p1
Do obiektów odwołujemy się poprzez kropkę „ . ” lub poprzez „ -> ”
W samym kodzie programu dostęp do zmiennych wewnątrz klasy , które są nazywane polami jest uzależniony od tego czy mamy do
czynienia ze zmienną typu klasowego, czy wskaźnikiem na ten obiekt:
- W przypadku zmiennej o typie klasa, dostęp do pól uzyskuje się operatorem wyłuskania którym jest (.)
obiekt.pole = wartosc; //przypisanie wartości polu w obiekcie
- Jeżeli mamy do czynienia ze wskaźnikiem, operatorem wyłuskania jest strzałka -> (myślnik i symbol większości)
obiekt->pole = wartosc;
Definiując klasę możemy ograniczyć dostęp do niektórych składników klasy. Są trzy rodzaje dostępu do składników:
public
oznacza, że składniki deklarowane po tej etykiecie są dostępne z każdego miejsca programu,
private
oznacza, że składniki deklarowane po tej etykiecie dostępne są tylko dla funkcji składowych tej klasy; funkcje globalne (zwykłe)
nie mają dostępu do tych składników, a więc z funkcji main również nie ma dostępu do tych danych,
protected
tak jak w przypadku private z tą tylko różnicą, że dostęp do takich składników mają jeszcze klasy wywodzące się z tej klasy
(będzie to wytłumaczone przy dziedziczeniu)
70.Do czego służą konstruktor i destruktor?
*Konstruktor w programowaniu obiektowym to specjalna metoda danej klasy, mająca za zadanie utworzyć obiekt tej klasy.
Zadania konstruktora:
Wywołanie konstruktora powoduje wykonanie następujących zadań:
- obliczenie rozmiaru obiektu
- alokacja obiektu w pamięci
- wyczyszczenie (zerowanie) obszaru pamięci zarezerwowanej dla obiektu (tylko w niektórych językach)
- wpisanie do obiektu informacji łączącej go z odpowiadającą mu klasą (połączenie z metodami klasy)
- wykonanie kodu klasy bazowej ( w niektórych językach nie wymagane)
- wykonanie kodu wywołanego konstruktora
Z wyjątkiem ostatniego punktu powyższe zadania są wykonywane wewnętrznie i są wszyte w kompilator lub interpreter języka, lub w
niektórych językach stanowią kod klasy bazowej.
*Destruktor - w obiektowych językach programowania specjalna metoda, wywoływana przez program przed usunięciem obiektu i niemal
nigdy nie jest wywoływana wprost w kodzie używającym obiektu. Pod względem funkcjonalnym jest to przeciwieństwo konstruktora.
Destruktor ma za zadanie wykonać czynności składające się na jego "zniszczenie", inne niż zwolnienie pamięci zajmowanej przez sam
obiekt, przygotowujące obiekt do fizycznego usunięcia. Po jego wykonaniu obiekt znajduje się w stanie osobliwym i zazwyczaj nie można
już z tym obiektem zrobić nic poza fizycznym usunięciem. Destruktor zwykle wykonuje takie czynności, jak zamknięcie połączenia z
plikiem/gniazdem/potokiem, odrejestrowanie się z innych obiektów, czasem również zanotowanie faktu usunięcia, a także usunięcie
obiektów podległych, które obiekt utworzył lub zostały mu przydzielone jako podległe (jeśli jest ich jedynym właścicielem) lub
wyrejestrowanie się z jego użytkowania (jeśli jest to obiekt przezeń współdzielony).
class Abstrakcyjna {
public:
virtual void metodaCzystoWirtualna() = 0; }; // metoda czysto wirtualna
class Nieabstrakcyjna : public Abstrakcyjna { // dziedziczenie
public:
void metodaCzystoWirtualna() { // implementacja metody czysto wirtualnej
// instrukcje metody
return; }};
int main() {
// Abstrakcyjna obiektX; // błąd, klasa jest abstrakcyjna
Nieabstrakcyjna obiektY; // poprawne
return 0;
}
416 = 1A0H
1011D = 1111110011B