Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 4

*Operator rzutowania

Zmiana typu danych: operator rzutowania


Operator rzutowania służy do zmiany typu danych na inny:
(typ_danych)x;
gdzie typ_danych oznacza ten typ danych, na który ma zostać zamieniona wartość zmiennej x.
Np. deklaracja:
(float)5;
spowoduje zmianę stałej całkowitej 5 (typu int) na stałą zmiennoprzecinkową 5.0 (typu float).

60.W jaki sposób można przesyłać argumenty do funkcji – porównaj te sposoby?


*Przesyłanie argumentów funkcji przez wartość: występują tutaj argumenty formalne formalne i aktualne. Argumenty formalne to jest to,
jak na parametry mówi sobie w środku funkcja, natomiast argumenty aktualne to te, co aktualnie stosujemy w konkretnym wywołaniu
funkcji.
*Przesyłanie argumentów przez referencje: ( przez przezwisko) , przesyłanie argumentów przez referencje pozwala tej funkcji na
modyfikowanie zmiennych ( nawet lokalnych) znajdujących się poza ta funkcja.

61.Na czym polega przeładowanie funkcji.


Przeładowanie funkcji: następuje wtedy, gdy w danym zakresie ważności jest więcej niż jedna funkcja o tej samej nazwie. To, która z tych
funkcji zostanie wykonana, zależy od liczby lub typu argumentów, z którymi dana funkcja jest wywoływana.

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

64.Zdefiniuj i napisz do czego wykorzystuje się wskaźniki?


Wskaźnik to zmienna (zwana zmienna wskaźnikową) która zawiera adres pierwszej komórki pamięci, w której przechowana jest inna
zmienna. Jeśli zmienna zajmuje więcej niż jedną komórkę pamięci to wskaźnik wskazuje na pierwszą z tych komórek. Dla każdego
wskaźnika określany jest jego typ. Wskaźnik typu int wskazuje na zmienną typu int. Dzięki temu, kompilator wie ile komórek w pamięci
zajmuje zmienna rozpoczynająca się w komórce, na którą wskazuje wskaźnik. Nierozłącznie ze wskaźnikami związane są dwa operatory.
Są to operator wyłuskania, który jest zapisywany jako gwiazdka (*) oraz operator pobrania adresu &. Oba te operatory są operatorami
przedrostkowymi (zapisuje się je przed zmienną) oraz jednoargumentowymi. Zastosowanie wskaźników: wskaźniki stosuje się w różnych
sytuacjach, a mianowicie gdy chodzi nam o:
- ulepszenie pracy z tablicami
- funkcje mogą zmieniać wartość przesyłanych do nich argumentów
- dostęp do specjalnych komórek pamięci
- rezerwacje obszarów pamięci
int x=1; //deklaracja zmiennej int
int *wskaznik; //deklaracja wskaźnika na typ int
wskaznik = &x; //przypisanie adresu zmiennej wskaźnikowi
*wskaźnik = 99; //zapis równoważny z "x=99;"
Pierwsza linia przedstawionego kodu jest oczywista więc nie będziemy jej spejcajlnie analizować. W drugiej lini zadeklarowaliśmy
wskaźnik na typ int. Zatem jak można się domyślać deklaracja wskaźnika wygląda następująco:
<modyfikator> <typ> *nazwa;
Zatem sama deklaracja wskaźnika na zmienną danego typu różni się od deklaracji zmiennej jedynie dodatkowym znakiem '*'
poprzedzającym nazwę zmiennej.

65.W jaki sposób definiuje się tablice dynamiczne?


Tablice dynamiczne – ich rozmiar mógł być ustalany w trakcie działania programu.
Coś w tym stylu

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:

struci rect ekran;


a1 = ekran.p1.x
b1 = ekran.p1.y;

67.Podaj przykład definicji klasy i definicji obiektu klasowego.

*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 „ -> ”

68.W jaki sposób możemy odwołać się do składników klasy?

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;

69.Do czego służą etykiety private, protected i public?

Etykiety public, private, protected

Tworząc nową klasę możemy decydować, co ma udostępniać, a co nie. Przykład:


class zmywarka
{
public:
int nr_programu ;
float temp_wody ;
char nazwa[80] ;

bool plukaj( nr_programu, temp_wody ) ;


bool susz( nr_programu ) ;
private:
int cisnienie_wody ;
int obciazenie ;

bool zwolnijzawory( nr_programu ) ;


};

Oto rodzaje dostępu do składników klasy:

public - jest dostępny bez ograniczeń.


private - jest dostępny tylko dla funkcji składowych danej klasy i funkcji zaprzyjaźnionych tej klasy.
protected - jest dostępny tak, jak składnik private, ale jest jeszcze dodatkowo dostępny dla klas wywodzących się od tej klasy.

Etykiety te można umieszczać w dowolnej kolejności, mogą też się powtarzać.


Domniemanie - zakłada się, że dopóki nie wystąpi żadna z powyższych etykiet, to składniki mają dostęp private.

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

71.Do czego wykorzystuje się wskaźnik this?


Czemu służy wskaźnik this ? Każdy obiekt danej klasy posiada własną kopię zestawu pól. Natomiast funkcje składowe są przechowywane w
jednym egzemplarzu; Wskaźnik this pozwala na zidentyfikowanie właściciela danych, do których odwołuje się funkcja składowa; Jeśli
chcesz uniknąć kłopotów, nigdy nie zmieniaj wartości wskaźnika this!

72.Wyjaśnij istotę dziedziczenia?


Dziedziczenie (ang. inheritance) to w programowaniu obiektowym operacja polegająca na stworzeniu nowej klasy na bazie klasy już
istniejącej. Załóżmy, że w naszym programie wynikła potrzeba użycia dodatkowej klasy, która różni się od tej jedynie w kilku szczegółach.
Dzięki dziedziczeniu nie musimy tworzyć takiej klasy od zera, a możemy zamiast tego wprowadzić jedynie konieczne modyfikacje do klasy
już istniejącej.

73.Podaj przykład klasy abstrakcyjnej.


W C++ klasą abstrakcyjną jest klasa, która posiada zadeklarowaną co najmniej jedną metodę czysto wirtualną. Każda klasa, która dziedziczy
po klasie abstrakcyjnej i sama nie chce być abstrakcyjną, musi implementować wszystkie odziedziczone metody wirtualne.

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

1. Zapisz liczbę 416D w uklądzie 2-kowym, 16-stkowych i dziesiętnym

416:2 = 208 reszty 0


208:2 = 104 reszty 0
104:2 = 52 reszty 0
52:2 = 26 reszty 0
...............................
416:16 = 26 reszty 0
26:16 = 1 reszty 10 – czyli A

416 = 1A0H

2. Ile w układzie dziesiętnym i dwójkowym wynosi 3F3H


Zamiana na dziesiętny:
3*162+F*162 +3*16(0) = 1011B
1011:2=505 reszty 1
505:2 = 252 reszty 1
252:2 = 126 reszty 0
126:2 = 63 reszty 0
63:2 = 31 reszty 1
31:2 = 15 reszty 1
15:2 = 7 reszty 1
7:2 = 3 reszty 1
3:2 = 1 reszty 1

1011D = 1111110011B

You might also like