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

Konstruktorius

Klasė
Klasės – C++ plėtinys C kalboje įvestoms struktūroms. Klasė praplečia struktūros galimybes apimdama ne
tik duomenis – laukus, bet ir klasės duomenims būdingas funkcijas (klasės funkcijos paprastai vadinamos
metodais). Be to, įvestos papildomos galimybės klasėje slėpti (inkapsuliuoti) atskirus klasės elementus –
laukus ar metodus. Tam skirti specialūs reikšminiai žodžiai public, private ir protected, struktūrą Knyga
galima pateikti kaip lygiai tas pat galimybes turinčią klasę taip:

PVZ:

Inicializacinis sąrašas
Konstruktoriaus perkrovimas

Konstruktorius pagal nutylėjimą


Kopijos konstruktorius

Destruktorius
Rodyklė
Statiniai klasės duomenys
Konstantos, const ir klasės
Objektų masyvai
1-Operatorius throw : kontroliuoja skliausteliais apimtą operatorių grupę, ar ten nekilo išimtis.
Kontroliuojamoje grupėje turi būti bent vienas operatorius (tarkim, funkcijos kvietimas);

2-Operatorius catch : if( klaidos sąlyga ) throw klaidos objektas; – taip esant įvykdytai klaidos
sąlygai yra sukuriamas klaidos objektas;
3-Operatorius try : Toliau operatorius catch gali „sugauti“ vos atsiradusį klaidos objektą, nutraukti
tolesnių kontroliuojamos grupės operatorių vykdymą ir klaidingą situaciją apdoroti.

TypeDef- Jis naudojamas kuriant papildomą kito tipo duomenų pavadinimą, tačiau nesukuria naujo tipo,
išskyrus neaiškų masyvo tipo kvalifikuoto typedef atvejį, kai typedef kvalifikatoriai perkeliami į masyvo
elemento tipą.

Raktažodžiai kurie reikalingi deklaruojant šabloną:


 Typename
 Class

Konstruktorius- taikomas kuriant klasės objektą iš kito objekto


Void get (item* i) – gauna rodyklę į objektą.

Klasės laukas iš private sekcijos prieinamas tik klasės metodui

i=i+1 ++i // preinkrementas


i=i+1 i++ // postinkrementas
i=i-1 --i // predekrementas
i=i-1 i-- // postdekrementas

RTTI Mechanizmo būtinai reikalauja dynamic_cast pertvarkymo

Operatoriu perkrovimas skirtas:


apibrėžti draugiškai klasei

Kada kyla išimtis bad_alloc?


Ats: Kai new negali paskirti atminties
Kaip tvarkytis su išimtimi konstuktoriuje?
Ats : Nė vienas iš išvardintų.
Paaiškinimas apačioj:

Kuris iš šių duomenų yra abstraktaus tipo?


Ats: Class.
Ką reiškia daugybinis paveldėjimas?
Ats: išvestinė klasė paveldi iš daugiau nei vienos bazinės klasės
Teiginiai:
Abstrakčios klasės objektus sukurti negalima
Abstrakti klasė turi grynai virtualią funkciją

Raktažodis virtual padaro klasę


Ats: polimorfine
Kuriant išvestinės klasės objektą, pirmiau sukuriamas bazinės klasės
objektas
Ats: Taip
Viena iš Polimorfizmo sąlygų yra:
Ats: Virutalus metodas
Bazinė klasė „žino“ išvestinės klasės savybes
Ats: Ne

____ operatorius skiria dinaminę atmintį


Ats: New
Koks operatorius deklaruoja destruktorių?
Ats: ~
Teiginys destruktorius, kaip ir konstruktorius, taip pat grazina reiksmes yra:

Atsakymas: FALSE
Kas tai lokalūs kintamieji?

Atsakymas: tai kintamoieji.paskelbti kurioje nors matumo srityje


Duota kodo istrauka,esanti funkcijoje?

Atsakymas: Funkcijos f argumentas


Kam lygus kintamasis int c = (14%3)/3?

Atsakymas: 1
Jei klase pirma deklaruoja klase antra kaip draugiskai, tai

Atsakymas: klases antra metodai gali tiesiogiai naudotis klases pirma privaciais
duomenimis ir metodais
Kas tai yra funkcija?

Atsakymas- ivardinta savarankisku operatoriu grupe talpinama uz main funkcijos


ribu,kuria startine C/c++ funkcija main ( ar kuri kita zemesnio lygio funkcija) gali
pakviesti darbui.Pasibaigus funkcijos darbui,valdymas grazinamas ja kvietusiai
programai ar funkcijai.
Ka atitinka si logine schema?

Atsakymas: if(......){.....}

Ar nurodytos funkcijos yra perkrautos?


Atsakymas: FALSE
Klase A paveldeta klaseje B.Kokia tvarka bus vykdomi siu klasiu konstruktoriai?

Atsakymas: B klases konstruktorius po to A.


Objektai vienas kitam perduoda informacija per?

Atsakymas: funkcijas
Kas apibrezia programoje-int a b c

ATSAKYMAS: sveikuju skaiciu tipo dvimatis masyvas a ,kurio eiluciu skaciius b,


stulepliu skacius lygus c
Turime klase

Template <class T> class abc {

void f();

Koks turi buti klases metodo f() aprasymas?

Kiek maziausiai kartu bus vykdomas “do{…} while (…);” tipo ciklas?
Kuris elementas saugo viena savybes reiksme visiems tos pacios klases objektams?

Kokie ciklai naudojami C/C++ kalboje?

Kokiais budais informacija galima isvesti I ekrana (duomuo yra sveikasis skaicius)?
Kuris is teiginiu yra teisingas, jei klase paveldi kita klase kaip apsaugota (protected)?

Pasirinkite logini operatoriu, reiskianti “lygu”

Duotas kodo fragmentas. Isrinkite logine israiska (logical_expression), kuri grazintu “tiesa” (TRUE)

Kurie is teiginiu yra teisingi?


Inkapsuliacija objektiniame programavime vadiname:

Skirtingu parametru naudojimas to paties vardo funkcijoje vadinamas

Koks duomenu tipas C/C++ kalboje yra vadinamas masyvu?


Kokiais budais realizuojamas teksto eilutes duomenu tipas C/C++ kalboje?

Duotas kodo fragmentas. Kurie vardai bus isvesti I ekrana?

Duotas kodo fragmentas: … Kas bus parodyta ekrane, jei funkcijoje main() bus irasyta …
Kuris is teiginiu yra teisingas, jei klase paveldi kita klase kaip viesa (public)?

Pasirinkite teisinga ciklo for israiska

Kas bus isvesta i ekrana paleidus sia programa?


(teisingas)

Kokia reiksme igis kintamasis d programos pabaigoje?

Kaip naudojamas daugiavariantis sakinys?


Kaip turi buti pavartotas delete operatorius, kai buvo pavartota israiska ptr = new int [100]; ?
Ka isves pateikta programa:

Ka I ekrana isves programa?

ATS : 0

(teisingas)

Ka atspausdins programa?
(teisingas)

Duotas masyvas

Kaip atrodo loginis IR?


Kas butina norint tureti polimorfine programa?

Kokia funkcija privalo buti visose C/c++ kalba parasytose programose?

Kuri israiska teisingai isves I ekrana sakini “Hello world”?


Parinkite teisinga ciklo for israiska

Kodel toks ciklas nesikompiliuos?

Duotas kodo fragmentas:


Objektai vienas kitam perduoda informacija per

ATS: Funkcijas
Zinome, kad programos pradzioje yra sukuriamas masyvas, “int masyvas[20];”. Programos eigoje jis
uzpildomas reiksmemis. Toliau nuskaitome masyvo elementus naudojant cikla for:

Kuri israiska teisingai suskaiciuos, kiek pinigu liks nupirkus n spurge?


Kuri(-ios) is pateiktu funkciju yra su argumentais?

Duota kodo istrauka, esanti funkcijoje int main(), kur b – tai?

Kokiais budais informacija galima ivesti I programa?


Kaip vadinami kintamieji, apibreziami pries “int main ()” funkcija?

Kompiliavimas – tai:

ATSAKYMAS: Programos paleidimas.


Pasirinkite israiska ekvivalencia duotai israiskai:

Klases metodu pavertimas virtualiais leidzia:


Kas bus isvesta I ekrana?

Kokiais budais realizuojamos teksto eilutes?

Kuri is programoje kvieciamu funkciju ar metodu…


Ka atspausdins programa? (kitas)
Koks skyrybos zenklas eina po case aprasymo?

Viena is polimorfizmo salygu yra:

a. Virtualus metodas

Visi bazines klases laukai paveldimi

ATS: NE
Kas teisinga?

Kas teisinga?
+1. Kas yra klase?

ATSAKYMAS- klase,tai specifine vartotojo aprasyta struktura(vienam variantui);(kitam variantui)klase,tai


specifine struktura,jungianti savyje kintamuosius,skirtus duomenims ir funkcijas,kurios naudoja tuos
kintamuosius.

+2. Kaip klase igyvendina duomenu duomenu uzdengima?

ATSAKYMAS- klase private matomumo srityje apraso duomenis,kurie yra prieinami,naudojant


pasiekiamus(prieinamus)klases metodus.

+3.Kas yra klases konstruktorius?

ATSAKYMAS- tai klases metodas pavadintas klases vardu

+4.Kada yra kvieciamas klases destruktorius?

ATSAKYMAS- naikinant objekta

??5.,,Draugiskos''(friend) klasei funkcijos tai:

ATSAKYMAS-funkcijos galincios prieiti prie klasiu kurioms sios funkcijos yra draugiskos,pasleptu klasiu
metodu ir kintamuju.

+6. Klases public sritis?

ATSAKYMAS- prieinama tiesiogiai naudojant tos klases objektus

+7.Ar teisingas sekantis teiginys: klases srityse esantys duomenys ir metodai privalo buti uzdari.

ATSAKYMAS-neteisingas.klases srityje esantys duomenys ir metodai gali buti kaip uzdari,taip ir atviri.

+8.Klases naudingos, nes?

ATSAKYMAS-gali uzdengti savo duomenu prieiga(vienam variantui); savyje sukaupia informacija apie
konkretu modeliuojama objekta,jame panaudojamus kitnamuosius ir metodus/

+-9.Koks yra skirtumas(ai) tarp draugisku funkciju(friend) ir klases metodu?

ATSAKYMAS- klases metodai gali buti draugiskos funkcijos, ne klases funkcijos-negali(1var)(2var. klases
metodai naudojami per objekto kreipini,draugiskos funkcijos tik gali naudotis vidiniais objekto resursais)

+10.Kuris is siu operatoriu negali buti perkraunami?

ATSAKYMAS-::,?: (dar tinka .* ir .,)

+11.Operatoriu perkrovimas?

ATSAKYMAS- suteikia naujas funckijas esantiems standartiniams operatoriams(2 variantas padaro


perkraunamus operatorius tinakmus darbui su objektais)

+12???.Ar tiesa,kad operacija ObjA=ObjB klaidingajau kompiliacijos stadijoje, jei ObjA ir ObjB yra skirtingu
tipu?

ATSAKYMAS-ne ,jei operatorius yra perkrautas


???12.Jei sandaugos"'" operatoriui perkrausiu dalybos"/" funkcionaluma?

ATSAKYMAS- klaidos nebus

???13.Jei yra neaprasytas paveldejusios klases konstruktorius,tai bus kvieciamas bazines klases
konstruktorius?

ATSAKYMAS-Taip

???14.Bazines klases duomenys bei metodai prieinami is paveldejusios klases metodu?

ATSAKYMAS-jei jie yra bazines klases ,,protected" srityje

+15.Polimorfizmas?

ATSAKYMAS-metodo savybe igauti skirtingas realizacijas skirtingose klases paveldejimuose

+16.Ar tiesa,kad draugiskos funkcijos turi prieiga prie uzdaru klases kintamuju ir jos nera klases nares
funkcijos(metoda)?

ATSAKYMAS-Taip

???17.Kopijos konstruktorius kvieciamas,kai?

ATSAKYMAS- kai vienas objektas inicializuojamas,kitu objektu( pasitiklsinti- kai yra kkuriamas laikinas
objektas,grazinant metodo funckijos reiksme)

+18.Kaip objektas yra susietas su klase?

ATSAKYMAS-klase yra duomenu ir metodu abstrakcija,o objektas sios abstrakcijos realiziacija

+19.Kas yra klases destruktorius?

ATSAKYMAS-tai paskutinis klases metodas,kvieciamas pries objekto panaikinima

+20.Kada yra kvieciamas klases konstruktorius?

ATSAKYMAS-kvieciamas automatiskai,kaip pirmas klases metodas,prasidejus objekto konstravimui

+21.Kad draugiska "friend" funkcija galetu naudoti klases"Public" srities narius??

ATSAKYMAS-funkcija neprivalo buti deklaruota kaip draugiska tokiai klasei

+22.Ar teisingas teiginys: klase gali tureti daugiau nei viena konstruktoriu su tuo paciu konstruktoriaus
vardu?

ATSAKYMAS- teisingas

+23.Jei bazine ir paveldejusi klases naudoja metodus su tokiais paciais vardais,tai paveldejusios klases
objektas?

ATSAKYMAS-naudos paveldejusios klases metoda jei metodo naudojimas is bazines klases neaprasytas
operatoriumi.

+24.Paveldejimo paskirtis?

ATSAKYMAS-isplesti baziniu klasiu funkcionaluma paveldejusiose klasese


+25.Virtualus metodai?

ATSAKYMAS-privalo tureti identiska parametru sarasa.

+26.Abstrakti klase yra naudojama kai?

ATSAKYMAS-nuo sios klases neketiname kurti objektu.

Klase A paveldeta klaseje B. Kokia tvarka bus vykdomi siu klasiu konstruktoriai?- Bklases kontstruktorius,
poto konstruktorius A

Objektai vineas kitam informacija perduoda per- klases

Skirtingu parametru naudojimas to paties vardo funkcijoms vadinamas- operaciju perkrovimas

Kuris is siu teiginiu yra teisingas,jei klase paveldi kita klase kaip apsaugoja?-bazines klases viesi elementai
taps apsaugoti sivestines klaseje

Ar gali klase tureti virtualu destruktoriu?- Ne

Kuris elementas issaugo viena reiksme visiems tos pacios klases elementams?- STATIC

Draugiska funkcija ir druagiskos klases metodai gli tiesiogiai kreiptis i apsaugotus ir privacius klases
duomenis- TRUE

Inkapsuliacija tai- nei viena is nurodytu

PAPILDYMAS
1. Visi bazinės klasės laukai paveldimi
NE
2. Kokio operatoriaus negalima perkrauti?
Ats: ::
(Neleidžiama taip pat perkrauti šių operatorių: ::, ?:, ., sizeof.)

3. Kada kyla išimtis bad_alloc?


Ats: kai new negali paskirti atminties

4. Typedef yra raktažodis, skirtas priskirti alternatyvius pavadinimus esamiems duomenų formatams
ATS:Tiesa
5. _______ operatorius skiria dinaminę atmintį
Ats: new
6. Koks operatorius tikrina, ar kontroliuojamoje sekcijoje įvyko klaida?
Ats: catch
7. Ka spausdins programa?

#include <iostream>
using namespace std;
class Animal {
private: int legs, tail;
public: void set()(legs = 4; tail=1;)
friend int compute (Animal a){return a.legs+a.tail+10;}
};
int main () {
Animal *a = new Animal; a->set(); cout<<compute(*a)<<endl; return 0;
}
ATS: kompiliavimo klaida
8. Koks operatorius deklaruoja destruktorių?
Ats: ~
9. Koks raktažodis reikalingas deklaruojant šabloną?
Ats: typename
10. _________ taikomas kuriant klasės objektą iš kito objekto
Ats: kopijos konstruktorius
11. Funkcija, kurios prototipas yra void get (item*i); gauna
Ats: rodykle i objekta

12. Klasės laukas iš _________ sekcijos prieinamas tik klasės metodui


Ats: private
13. Klases laukas is_sekcijos prieinamas tik klases metodui
Ats: private

14. Kas nėra paveldima iš bazinės klasės?


Ats: nė vienas iš išvardytų
15. Kas nera paveldima is bazines klases?
Ats: nė vienas iš išvardytų
16. Norint klasės lauką paslėpti nuo likusios programos dallies, jį reikia deklaruoti:
Ats: private
17. Norint klases lauka paslepti nuo likusios programos dallies, ji reikia deklaruoti:
Ats: private

18. Ka spausdins programa?:

#include <iostream>
using namespace std;
int main() {
int *a = new int[5];
for (int i=1; i<=5; i++) *a++ = i*10;
cout<<*(--a)<<endl;
return 0; }

ATS: 50
19. Kaip deklaruoti postinkremento perkrovimą?
Ats: operator++(int)
20. Kuris tipų pertvarkymas reikalauja RTTI mechanizmo?
Ats: dymanic_cast
21. Bazinės klases paveldi:

1. Kokiais reikšminiais žodžiais yra slepiami klasės elementai – laukai ir metodai?


įvestos papildomos galimybės klasėje slėpti (inkapsuliuoti) atskirus klasės
elementus – laukus ar metodus. Tam skirti specialūs reikšminiai žodžiai
public,private ir protected.

4. Kokios klasės yra vadinamos datoriais?


Klasės, teturinčios tik laukus, dar vadinamos datoriais

5. Kokios klasės yra vadinamos funktoriais?


klasės tik iš metodų – funktoriais.

6. Ką skelbia vienas pagrindinių objektinio programavimo, inkapsuliacijos


principas?
Klasės vartotojas turi matyti vien tik tai, kas jam aktualu – klasės sąsają. Toks
informacijos inkapsuliavimas – vienas iš pagrindinių objektinio programavimo
principų.

8. Kurioje konstruktoriaus vietoje yra klasės laukų inicializavimo sąrašas?


Abiem atvejais klasės laukams reikšmės priskiriamos vadinamajame inicializavimo
sąraše iškart po konstruktoriaus argumentų sąrašo, po dvitaškio, o metodų-
konstruktorių kūnai tada lieka tušti – nors galima laukų reikšmes priskirti ir
konstruktoriaus kūne.
15. Kodėl reikėtų vengti klasei draugiškų funkcijų bei klasių naudojimo?
Šis draugiškų funkcijų mechanizmas prieštarauja esminiams objektinio
programavimo principams – duomenų slėpimui klasių viduje. Jį derėtų taikyti
rezervuotai, gal tik programos derinimo metu. Panaši ir draugiškos klasės idėja:
tokios klasės metodai turi prieigą prie kitos klasės, kurioje ši paskelbta
draugiškąja, uždarų laukų.

17. Kada naudojama direktyvos pragma once?


Direktyvos pragma once antraštiname faile prasmė – neleisti programos saistymo
metu apibrėžti klasės kelis kartus – o taip gali atsitikti sudėtingesniame projekte,
kai antraštiniuose failuose savo ruožtu yra kelios include direktyvos.

1. Kas yra ir kam yra taikomos rodyklės ?


Rodyklė (angl. pointer) – kintamasis, saugantis kito konkretaus tipo kintamojo
adresą.
Rodyklės taikomos:
 Netiesioginei prieičiai prie kintamojo.
 Prieičiai prie masyvo elementų.
 Argumentams perduoti į funkcijas.
 Duomenų grąžinimui iš funkcijos.
 Funkcijoms kviesti rodykle.
 Dinaminei atminčiai skirti.
 Duomenų struktūroms (pavyzdžiui, saitiniam sąrašui) kurti

5. Į ką rodo neinicializuota rodyklė ?


Neinicializavus rodyklės, ji rodo atsitiktinį adresą.

6. Kaip rodyklė inicializuojama nuline reikšme ?


Galima rodyklę inicializuoti nuline reikšme literalu NULL, o turint kompiliatorius,
išleistus po 2010 m. – ir nullptr.
7. Kaip yra atliekama įreikšminimo operacija ?
int *p = &k1;
*p = 30;
k2 = *p;

8. Kam yra naudotinas sizeof operatorius ?


Bet kokio masyvo elementų kiekį galima sužinoti taip, kaip parodyta: sizeof
operatoriumi

10. Kaip rodyklė nukreipiama į dvimačio masyvo elementus ?


int array[ 2 ] [ 3 ];
int *p1, *p2;
int (*p3)[ 3 ];
...
// p1 = array; // klaida!
p1 = &array[ 0 ] [ 0 ]; // 1
p2 = array[ 0 ]; // 2
p3 = array; // 3

2. Kaip kompiuterio atmintyje paskiriama statinė ir dinaminė atmintis ?


skiriama kompiuterio atmintinės dalyje, vadinamoje steku – Stack.
Dinaminė atmintis programos objektams skiriama kitoje kompiuterio atmintinės
dalyje, vadinamojoje heap, arba laisvojoje atmintinėje.

2. Kam yra naudojamos rodyklės į funkcijas ?


Rodyklės į funkcijas naudotinos skirtingo tikslo funkcijų prieigai per tą patį
rodyklės kintamąjį.

3. Kodėl negalima grąžinti lokalaus funkcijos kintamojo adreso ?


Taigi lokalus kintamasis išėjus iš funkcijos bus sunaikintas, todėl rodyklė rodys
nežinia į ką.

3. Kada būtina parašyti kopijos konstruktorių?


Atsakymas toks: kai klasės laukas (-ai) kuriami dinamiškai

5. Į ką rodo rodyklė this ?


this yra rodyklė į šiuo metu apdorojamą objektą

1. Kokiems veiksmams atlikti taikytinas operatorių perkrovimas?


Operatorių pritaikymas operatorių ( +, -, *, /, % ) veiksmams atlikti su klasemis ir
vadinamas operatorių perkrovimu (angl. overloading).

2. Kokia yra operatorių perkrovimo prasmė?


Perkrovimo prasmė – supaprastinti ir padaryti intuityviai labiau suprantamą
programą.

3. Kokiu reikšminiu žodžiu žymimas operatorių perkrovimas?


metodas turi turėti reikšminį žodį operator ir iškart po jo einantį operacijos ženklą,
pavyzdžiui, void operator+( ){ . . . }
4. Kuo skiriasi lokalusis ir globalusis operatorių perkrovimai?
Operatorius gali būti perkrautas klasės metode ir naudojamas tik su tos klasės
objektais. Toks operatorių perkrovimas dažnai vadinamas lokaliu. Jam
alternatyvus yra globalusis operatorių perkrovimas, aprašomas ne klasės metode,
o klasei nepriklausančioje funkcijoje. Globalusis operatorių perkrovimas-funkcija
naudoja klasės objekto ar objektų vidinius duomenis.

5. Ar C++ leidžia sukurti naujų veiksmų operatorius?


C++ neleidžia kurti savų, naujų veiksmų operatorių.

6. Kokie operatoriai negali būti perkrauti?


Neleidžiama taip pat perkrauti šių operatorių: ::, ?:, ., sizeof.

10. Kuris binarinės operacijos objektas yra laikomas darbiniu?


C++ sintaksėje sutarta, kad objektas iš perkrautosios operacijos kairiosios pusės
laikomas darbiniu objektu.

11. Kokia seka atliekami sudėtingo binarinio operatoriaus veiksmai?


d4 = d1 + d2 + d3;
Čia dvi sudėties operacijos būtų vykdomos iš kairės į dešinę: iš pradžių sudedami
objektai d1 ir d2, jų sudėties rezultatas-objektas išsaugomas tarpinėje atmintyje
(rodyklės į šį objektą programoje neturime, todėl negalime pažiūrėti jo laukų
reikšmių), o vėliau sudedamas jau šis objektas su d3.

13. Kokiu operatoriumi atliekamas duomenų pervardijimas?


typedef
typedef senasVardas naujasVardas;
typedef int feet;

3. Kokios prieigos galimybės prie reikšminiu žodžiu protected apibrėžtų laukų?


Kad išvestinės klasės metodams būtų prieinami bazinės klasės laukai
6. Turime bazinę ir išvestinę jai klases. Kokia seka yra konstruojamas išvestinės
klasės objektas?
prieš konstruojant išvestinės klasės objektą yra suformuojamas atitinkamas
bazinės klasės objektas

10. Kaip išvestinėje klasėje perrašius metodą iškviesti to paties vardo bazinės
klasės metodą?
class SafeStack: public Stack {
public:
int pop( ){
if( top < 0 ){
cout<<"Stack empty"<<endl;
system( "pause" );
exit( 1 );
}
return Stack::pop( ); // pastaba
}
};

1. Kada yra taikytinas dalinis paveldėjimas?


Taigi dalinį paveldėjimą reikėtų taikyti, norint nuo išvestinės klasės objektų
paslėpti visus bazinių klasių laukus ir metodus

2. Kokia yra daugybinio paveldėjimo aprašymo sintaksė?


class A{ };
class B{ };
class C: public A, public B { };
3. Kaip veikia konstruktoriai daugybinio paveldėjimo išvestinėje klasėje?
Formuojant išvestinės klasės objektą, iš pradžių, kaip žinote,
automatiškai suformuojami visų jos protėvių klasių objektai – jie bus išvestinės
klasės objekto dalis.

1. Kokia „kylančiojo tipų pertvarkymo“ esmė?


bazinio tipo rodyklę nukreipėme į išvestinių tipų objektų atminties sričių pradžias,
tam išvestiniai tipai pertvarkomi į bazinį tipą.

2. Koks metodų saistymas yra vadinamas statiniu?


kompiliatorius nežiūri į turinį atminties srities, į kurią rodo rodyklė – metodą
renkasi pagal rodyklės tipą. Toks kreipinio į metodą ir metodo kūno susiejimas
vadinamas statiniu saistymu, vykdomu iškart po kompiliavimo stadijos.

3. Kokia klasė yra vadinama polimorfine?


Klasė, kurioje yra bent vienas virtualus metodas

5. Kaip vadinama klasė, turinti bent vieną grynai virtualu metoda?


Klasė, turinti bent vieną grynai virtualią funkciją, jau vadinama abstrakčia klase.
6. Kodėl bazinės polimorfinės klasės destruktorius turi būti virtualus?
jeigu nebutu jo, naikinant išvestinių klasių objektus būtų kviečiamas tik bazinės
klasės destruktorius.

7. Kokią informaciją teikia RTTI mechanizmas?


kai operuojama tik rodyklėmis į bazinį tipą, gali prireikti sužinoti į kokio konkrečiai
formato objekto atminties sritį ta rodyklė rodo

8. Kokiose programose yra leidžiamas dinaminis pertvarkymas?


dinaminis pertvarkymas leidžiamas tik polimorfinėse programose

1. Kas yra išimtys?


vykdant programą kylančios klaidingos situacijos, nutraukiančios programos darbą
2. Kokie yra išimčių apdorojimo etapai?
tris etapai:
– Sukuriama klaidos klasė (ji gali būti ir visai tuščia).
– Operatorius try{ operatorių grupė } kontroliuoja skliausteliais apimtą operatorių
grupę, ar ten nekilo išimtis. Kontroliuojamoje grupėje turi būti bent vienas
operatorius (tarkime, funkcijos kvietimas).
– Kontroliuojamos operatorių grupės viduje yra operatorius if( klaidos sąlyga )
throw klaidos objektas; – taip esant įvykdytai klaidos sąlygai sukuriamas klaidos
objektas.
– Toliau operatorius catch gali „sugauti“ vos atsiradusį klaidos objektą, nutraukti
tolesnių kontroliuojamos grupės operatorių vykdymą ir klaidingą situaciją
apdoroti.

3. Kur yra perduodamas programos valdymas konstatavus išimties situaciją?


Sugavus klaidą, valdymą iškart gavo operatoriaus catch sritis { . . . }.

Kokios yra vidinės kalbos išimties klasės?


bad_alloc

1. Kam yra taikytinas šablonų mechanizmas?


lakoniškas mechanizmas funkcijų ar klasių, besiskiriančių tik argumentų ar laukų
formatais, šeimai užrašyti

2. Kas yra šablono argumentas?


apibendrintas duomens tipas.
3. Kokioje konstrukcijoje yra teikiamas šablono argumentas?
Šablono argumentas teikiamas konstrukcijoje template <class
argumento_pavadinimas> (o vietoje trumpo reikšminio žodžio class galima rašyti
ir geriau šablono esmę apibūdinantį reikšminį žodį typename)

4. Kaip su šablonais dirba kompiliatorius?


kompiliatoriui kviečiant šabloninę funkciją su konkrečiu vidinio tipo argumentu,
kompiliatorius sukuria funkciją, operuojančią to tipo argumentu.

5. Kaip yra aprašoma funkcija su keliais šablono argumentais?


template <typename tarray, typename tsize >
tsize find( tarray* array, tarray value, tsize size ){
for( tsize i = 0; i<size; i++ )
if( abs(array[i]-value) <= static_cast<tarray>(1.e-6) ) return i+1;
return static_cast<tsize>(-1);
}

6. Kuo skiriasi funkcijų bei klasių šablonai?


Klasių šablonų idėjos nesiskiria nuo funkcijų šablonų idėjų: klasių laukus galima
skelbti esant apibendrinto duomenų formato.
7. Kaip už klasės ribų aprašomi šabloninės klasės metodai?
Klasės-šablono metodų pateikimas už klasės ribų. Dabar prieš kiekvieną
metodo apibrėžimą už klasės ribų teks kartoti reikšminį žodį template, o prieš
priklausomybės operaciją :: dar reikia nurodyti ir klasės realizaciją norimam
duomens formatui – šiuo atveju teks
kartoti šablono argumentą <t>.
//
template<typename t> // būtina kartoti reikšminį žodį
SafeStack<t>::SafeStack( ){ top = -1; } // būtina nurodyti klasės realizaciją

1 Paskaita:

Burbulo algoritmas - imame pirmąjį masyvo elementą ir jį lyginame iš eilės su visais likusiais masyvo
elementais. Jei elementų eilė netinkama – sukeičiame juos vietomis. Imame antrąjį elementą, ir visus
veiksmus kartojame – taip iki kol pasieksime priešpaskutinį masyvo elementą.

2 Paskaita: Klases

Klasės – C++ plėtinys C kalboje įvestoms struktūroms.


Klases funkcijos vadinamas metodais.
Public - visi klasės laukai yra matomi – laisvai pasiekiami iš už klasės ribų.
Private – matomas tik klases viduje.
Datoriai – klases, kurios turi tik laukus.
Funktoriai – klases, kurios sudarytos tik is, metodu.
Objektai visada suformuojami specialiu metodu – konstruktoriumi.
Destruktorius – visi klases objektai sunaikinami – is ju atimama atmintis. Destruktoriu patiems reikia rasyti
tik tada, kai naikinant objektai butina ne tik atimti atmintį, bet ir kai klaseje naudojami dinaminiai
kintamieji.
Vienas is pagrindiniu objektyvinio programavimo principu – visi klases laukai skelbiami uzdarais, o prie ju
prieti galima tik per atvirus metodus. Tai ypač patogu kuriant klases, skirtas platesniam vartotojų ratui.
Klases kurejas islaikydamas klases sasaja tokia pacia, gali laisvai modifikuoti klases vidu. Jei visas klasės
turinys būtų atviras bet kuriam jos vartotojui, neišmanantis vartotojas galėtų daryti su tuo turiniu ką
panorėjęs ir lengvai pažeisti klasės funkcionalumą. Klasės vartotojas turi matyti vien tik tai, kas jam aktualu
– klasės sąsają.
Metodai - kvieciami (siunciami pranesimai) tik konkreciam objektai per tasko operacija. Klases viduje
esancios funkcijos.
Tarnybiniai metodai – siuos metodus turi dauguma klasiu: lauku inicializavimo metodas, lauku ivedimo
metodas ir lauku reiksmiu parodymo metodas. (getA(), setDisatance()).
Metodu realizacijos pateikiamos uz klases ir funkciju ribų.
Static – turi buti aprasomas už klasės ir funkcijų ribų. Jei toks laukas neinicializuojamas, jam automatiškai
priskiriama nulinė reikšmė.

4 paskaita: Rodykles
Rodykle - kintamasis, saugantis kito konkretaus tipo kintamojo adresą.
Rodyklės taikomos:
 Netiesioginei prieičiai prie kintamojo.
 Prieičiai prie masyvo elementų.
 Argumentams perduoti į funkcijas.
 Duomenų grąžinimui iš funkcijos.
 Funkcijoms kviesti rodykle.
 Dinaminei atminčiai skirti.
 Duomenų struktūroms (pavyzdžiui, saitiniam sąrašui) kurti.
Rodykles būtinos dinaminei atminčiai skirti, sąrašams kurti ir kai kurioms virtualių funkcijų galimybėms
realizuoti.
Kuriuose baituose kintamasis bus saugomas, priklauso nuo sisteminės atminties apimties, pačios
programos apimties, programos duomenų apimties, nuo to, kelios programos šiuo metu yra vykdomos ir
pan. – kiekvienąkart paleidus programą, kintamojo adresas bus skirtingas.
Neinicializavus rodyklės, ji rodo atsitiktinį adresą. Galima rodyklę inicializuoti nuline reikšme literalu NULL
arba nullptr.
Nuorodos esminis skirtumas nuo rodyklės: nuoroda yra tik alternatyvus kito kintamojo vardas.
Įreikšminimo operacija - zinant kintamojo adresą, galima gauti ir jo reikšmę arba jam priskirti norimą
reikšmę. Tam taikoma konstrukcija *rodyklė.
Sizeof – isvedamas kokio dydzio yra tas kintamasis. Parodo bet kokio masyvo elementų kieki. Juo taip pat
galima suzinot ir klases objekto lauku uzimamos atminties sritis dydi baitais.
Stack - statinė atmintis programos objektams, ar tai būtų paprastas kintamasis, ar masyvas, ar klasės
objektas, skiriama kompiuterio atmintinės dalyje. Standartiškai jai teskiriama 1 MB atminties.
Heap - tai yra programos vykdymo metu likusi laisva operatyviosios atminties dalis.
New – skiriama dinamines atminties objektui, kuri grazina atminties srities objektai pirmojo baito adresa,
todel ta adresa galima priskirti tik rodyklei.
Delete – siuo operatoriumi yra islaisvinama atmintis, kuri objektui tampa nebereikalinga. Pamirse tai
padaryti gausime atminties nutekejima (memory leak) – pritruks vietos laisvojoje atmintyje.
this-> - tai pointeris i objekta, kuriame mes esame.

Kontroliniai klausimai: 2 Paskaita


1. Klases elementai – laukai ir metodai yra slepiami reiksminiu zodziu private.
2. Reiksminis zodis public reiskia tai, kad jis yra matomas, pasiekiamas tiek klases viduje, tiek uz klases
ribų (Main fukcijoje, bei kitose klasese).
3. Jeigu laukai yra uzdari (private), norint irasyti norimas reikšmes reikia juos uzrasyti per metodus
(cin >>) arba konstruktorius.
4. Datoriai – tai klases, kurios turi tik laukus (saugomi tik duomenys).
5. Funktoriai – funkcijos objektas (Arturas). klases, kurios sudarytos tik is, metodu (Belevicius).
6. Inkapsuliacijos principas – klases vartotojas turi matyti vien tik tai, kas jam aktualu – klases sasaja.
Metodai yra viesi, o kintamieji uzslepti. Naudotojas naudoja tik metodus, nemato tai, kas yra
private.
7. Konstruktorius negali tureti grazinamos reikšmes formato raktazodzio. (int, void, double …)
8. Klases lauku inicializavimo sarasas yra kontruktoriuje po dvitaskio arba paciame konstruktoriuje.
(Pvz: Staciakampis() : a(4) ).
9. Destruktorius aprasomas simboliu ~(tildė).

Kontroliniai klausimai: 3 Paskaita


1. Destruktorius yra butinas tada, kai klases viduje yra dinaminiai kintamieji, masyvai.
2. Dinaminis objektas yra naikinamas raktazodziu delete ir objekto vardas. (delete obj vardas).
3. Klases metodui realizacijos pateikimo uz klases apibrezimo srities sintakse naudojamas dvigubas
dvitaskis :: .
4. Kopijos konstruktoriu reikia rasyti, kai klases viduje yra kuriami dinaminiai objektai.
5. Const – kai metodas nekeicia klases lauku.
6. Static – laukas, kuris bendras visiems objektams.
7. Static kvieciamas: klases vardas::kintamojo pavadinimas, bet galima kviesti ir per taska.
8. Statinio lauko inicializavimas vyksta uz klases ribų.
9. Statinis metodas naudojamas tada, kai norime tureti viena metoda bendra visiems klases
objektams.
10. Klases, kurios kuriamos kitos klases viduje pasiekiamas – Klases vardas::Naujos klases vardas.
11. Pragma once – dažniausiai naudojama .h faile. Ji naudojama tam, kad ta biblioteka includintu tik
viena karta (#pragma once).
12. .h faile saugomi, naudojami tik prototipai.

Kontroliniai klausimai: 4 Paskaita


1. Rodykleje yra saugomas adresas.
2. Kintamojo adreso reiksme yra saugoma sesioklitaineje skaičiavimo sistemoje.
3. Rodykle aprasomas * simboliu.
4. Neinicializuota rodykle rodo I neapibrezta vieta kompiuterio atmintyje.
5. Nuline reiksme rodykle inicializuojama: =0, =NULL (NULL = 0), =nullptr.
6. Sizeof – isvedamas kokio dydzio yra tas kintamasis.
7. I vienmacio masyvo elementus rodykle nukreipiama:

8. Lokalaus funkcijos kintamojo adreso negalima grazinti, nes po išėjimo jis yra iskarto sunaikinamas.
9. Kopijos konstruktoriu butina parašyti tada, kai yra klases viduj saugomi pointeriai, kurie rodo I
dinamiskai isskirta atminti. Kai klases viduj yra iskiriama dinamine atmintis ir saugomas pointeris
rodantis I ta dinamine atminti.
10. Operacija -> yra naudojama tada kai norima pagal pointeri pasiekti objekto metoda ar atributa,
lauka.

Kontroliniai klausimai:
1. Operatoriu perkorvimas taikomas bet kokiems veiksmams.
2. Operatoriu perkrovimo prasmė – vietoj metodo vardo naudojamas operatoriaus zenkliukas.
Suprastinti ir padaryti intuityviai labiau suprantama programa.
3. Operatoriu perkorvimas zymimas raktazodziu operator.
4. Skirtumas tarp globalaus ir lokalaus operatoriaus perkrovimo. Lokalus – priristas prie objekto.
Veikia tik taip-> (objektas + int). Globalus – uzrasomas globaliai su papildomais veiksmais. Veikia ir
taip-> (int + objektas).
5. Operatorai kurie negali buti perkraunami: taskas, ?:, ::, sizeof, typeid ir neegzistuojantys
operatoriai (Pvz.: &^$&^%&).
6. Kaip formaliųjų argumentų sąraše skiriamos priešinkremento ir poinkremento operacijos?
Priešinkremento – (int operator++ ()). Poinkremento – (int operator++ (int))
7. Is kaires esantis binarines operacijos objektas laikomas darbiniu. Argumento objektu laikomas
objektas iš perkrautosios operacijos dešiniosios pusės.
8. Sudetingo binarinio operatoriaus veiksmai atliekami is kaires I desine.
9. Duomenu pertvarkymas yra naudojamas skirtingu tipu duomenims sujungti viename prieskyros
operatoriuje ar aritmetiniame reiskinyje.
10. Duomenu pervardijimas (įskaitant ir klases) atliekamas raktazodziu typedef.
11. Duomenu pervardijimas pravartu naudoti, kai kintamieji turi ilgus pavadinimas. (Pvz.: typedef
unsigned long long ull).

Paveldimumas:

Protected – naudojamas tam, kad išvestinės klasės metodams būtų prieinami bazinės klasės laukai. Tačiau
jei programoje būtų paveldimumu nesusietų klasių, protected laukai gretimų klasių metodams liktų
neprieinami. Jei laukai būtų griežtai užverti – private – jie būtų prieinami tik pačios bazinės klasės viduje.
Public reiškia, kad realizuojamas bendrasis paveldimumas.
Kai programa sudėtinga, patogu pateikti jos klasių struktūrą ir paveldimumo schemą vadinamąja UML
diagrama. UML diagramoje parodomi klasių pavadinimai, atskiruose laukeliuose išvardijami laukai,
konstruktoriai, destruktoriai ir metodai bei klasių laukų prieigos galimybės. private laukai yra žymimi
simboliu „–“, protected - „#“, public – „+“. Paveldimumas žymimas rodykle bazinės klasės link. Išvestinės
klasės laukeliuose užrašomas tik klasės pavadinimas ir visi papildomi laukai, konstruktoriai, destruktoriai ir
metodai. Jei papildomų savybių laukų ar metodų skyriuose nėra, šie skyriai paliekami tušti.
////////////////////////////////////////////////////////////////////////////////////////
Kontroliniai klausimai:
1. Bazine klase – Tai klase, is kurios paveldesime visas savybes.
2. Isvestines klases – tai klases, kurios paveldi savybes is bazines klases.
3. Protected prieigines galimybės – tai kintamuosius galima pasiekti pacioje klaseje ir paveldetose
klasese.
4. Isvestines klases konstruktorius reikia rasyti tada, kai bazine klase neturi konstruktoriaus be
parametru.
5. Kaip išvestinėje klasėje yra perduodami bazinės klasės konstruktoriaus parametrai?
Pvz.: Safestack() : Stack(0);
6. Isvestines klases objektas yra konstruojamas tokia seka: is pradziu bazines, tada isvestines.
7. Neišreikštinis išvestinės klasės objekto pertvarkymas į bazinės klasės objekta yra galimas, nes
Isvestinis formatas apima visas bazines savybes ir dar gali jas papildyti.
8. Pertvarkiantysis konstruktorius yra naudojamas tada, kai norime sukonstruoti isvestine klase is
bazines klases. (Kai is bazines I isvestine).
9. Kaip išreikštine forma gali būti pertvarkomas objektas?
Su static_cast.
Kontroliniai klausimai: 11 Paskita
1. Dalinį paveldėjimą reikėtų taikyti, norint nuo išvestinės klasės objektų paslėpti visus bazinių klasių
laukus ir metodus.
2. Daugybinio paveldejimo aprasymo sintakse aprasoma per kableli.

Kontroliniai klausimai: 12 Paskita


1. „Kylančiojo tipų pertvarkymo“ esmė: Konvertuojama is pointerio rodancio I isvestini
objekta ir konvertuojama I bazini objekta.
2. Dinaminis – programos veikimo metu, statinis kompiliatoriaus.
3. Polimorfine klase, ta kuri paveldi kita klase, kuri turi virtualia funkcija.
(Klase, kurioje yra bent viena virtuali funkcija).
4. RTTI – teikia informaciją apie klasiu vardus, kokio tipo yra objektas.
5. Dinaminis pertvarkymas yra leidziamas tokiose programose, kurios turi virtualu metoda
(Polimorfinese programose).
Kontroliniai klausimai: 13 Paskita
1. Isimtys – vykdant programa kylancios klaidingos situacijos.
2. Isimciu apdorojimo etapai:
 Sukuriama klaidos klasė
 Operatorius try{operatorių grupė} kontroliuoja skliausteliais apimtą operatorių grupę, ar
ten nekilo išimtis.
 Kontroliuojamos operatorių grupės viduje yra operatorius if( klaidos sąlyga ) throw klaidos
objektas; – taip esant įvykdytai klaidos sąlygai sukuriamas klaidos objektas.
 Toliau operatorius catch gali „sugauti“ vos atsiradusį klaidos objektą, nutraukti tolesnių
kontroliuojamos grupės operatorių vykdymą ir klaidingą situaciją apdoroti.
3. Konstatavus isimties situaciją programos valdymas perduodamas I catch bloka.

Kontroliniai klausimai: 13 Paskita


1. Šablonas (angl. template) – lakoniškas mechanizmas funkcijų ar klasių, besiskiriančių tik argumentų
ar laukų formatais, šeimai užrašyti.
2. STL bibliotekos sudedamosios dalys: Duomenu strukturos, Algoritmai konteineriuose, iteratoriai.
3. Konteineriai yra dviejų pagrindinių tipų: nuoseklieji (masyvai, vektoriai, sąrašai, eilės) ir asocijuotieji
(aibės, atvaizdžiai, hash struktūros).
4. Pagrindinės iteratorių rūšys:
 įvesties/išvesties – tokie iteratoriai gali būti panaudoti programoje tik po vieną kartą;
 į priekį – judėjimui konteineryje į priekį;
 dvikrypčiai;
 atsitiktinės kreipties – duomenų elementui išrinkti pagal nurodytą objekto numerį
 (indeksą).
5. Pagrindiniai Algoritmai:
 find – rasti nurodytą objektą konteineryje;
 replace – pakeisti nurodytą objektą (arba jų grupę) kitu nurodytu objektu (kita
 grupe);
 fill – užpildyti visą (dalį) konteinerio duotaisiais objektais;
 transform – pakeisti visą (dalį) konteinerio objektų nurodytu būdu – vadinamuoju
 lyginimo predikatu (žr. toliau);
 sort – rūšiuoti visą (dalį) konteinerio nurodyta tvarka, taip pat tam būtini predikatai;
6. Pagrindiniai predikantai:
 less<T> – taikomas šablonui T; griežtai mažiau
 less_equal<T> – mažiau arba lygu
 equal<T> – lygu
 greater_equal<T> – daugiau arba lygu
 greater<T> – griežtai daugiau

Virtual tam kad butu kvieciama butent tos klases funkcijos versija.
Virtual negali buti statine, gali buti friend funkcija kitai klasei.

Virtual funkcija turetu buti pasiekiama per pointeri, tam kad ivyktu polimorfizmas.
Virtualios funkcijos prototipai turetu buti toki patys bazinej ir isvestinej funkcijoj.

Klase gali tureti virtualu destruktoriu, bet negali tureti virtualaus kontruktoriaus.
Jei funkcija aprasoma kaip virtual bazinej, o isvestinej klases ji yra tai ji automatiskai
priskiriama kaip virtual.

Reikia virtual destruktoriaus, nes kviest tik bazines jei tokio nebus.

Grynai virtual funkcija vadimana abstrakciaja.

dynamic_cast yra naudojamas kai dirbama su polimorfizmu.


Ji reikia naudot tik kai castinama i isvestine klase.

Klasė, kurioje yra bent viena virtuali funkcija, dar vadinama POLIMORFINE.

Dynamic_cast sukonvertuoti bazinės klasės rodyklę į išvestinės klasės rodyklę.

EXTERN Skelbimą be apibrėžimo nurodantis reikšminis žodis.

2. Viena iš polimorfizmo sąlygų yra:


a. Virtualus metodas
b. Virtuali klasė (gal ir sitas)
c. Friend funckija
d. Friend klasė

3. Visi bazinės klasės laukai paveldimi:


a. Taip
b. Ne

4. Ką spausdins programa?

#include <iostream>
Using namespace std;
Class Base{
Public: Base(){cout<<“Base“;} };
Class Derived{
Public: Derived() {cout <<“Derived“; };
classFriend: public Base, public Derrived{};
int main(){
Derrived d; Friend f; return 0; }

a. DerivedBaseDerived
b. BaseDerived
c. Kompiliavimo klaida
d. BaseDerivedDerived

5. Kokio operatoriaus negalima perkrauti?


a. =
b. ==
c. ::
d. <=

6. Kas bus, jei bazė ir išvestinė klasės turės metodus tuo pat vardu?
a. Bazino tipo objektui kviečiamas bazinės klasės objektas METODAS (išvestinės klasės objektui
būtų kviečiamas išvestinės klasės metodas)
b. Kompiliavimo klaida
c. Visad kviečiamas išvestinės klasės metodas
d. Visad kviečiamas bazinės klasės metodas

7. Kada kyla išimtis bad_alloc?


a. Kai new negali paskirti atminties
b. Kai delete negali atlaisvinti atminties
c. Kai numatytasis konstruktorius negali sukurti objekto
d. Kai konstruktorius negali sukurti objekto

8. Typedef yra raktoždis, skirtas priskirti alternatyvius pavadinimus esamiems duomenų


formatams
a. Tiesa
b. Netiesa

9. operatorius skiria dinaminę atmintį:


a. ->
b. ::
c. New
d. Alloc

10. Koks operatorius tikrina, ar kontroliuojamoje sekcijoje įvyko klaida? (ATS IF)
a. Throw
b. Try
c. Catch
d. Nė vienas (if)

11. Ką spausdins programa?


#include <iostream>
Using namespace std;
Class Animal{
Private: int legs, tail;
Public: void set(){legs=4; tail=1;}
Friend int compute(Animal a){return a.legs+a.tail+10;}
};
Int main(){
Animal *a=newAnimal; a->set(): cout<<compute(*a)<<endl;
Return 0;
}
a. 14
b. 0
c. Kompiliavimo klaida
d. 15 (jei tvarkingai parašyta)

12. Koks operatorius deklaruoja destruktorių?


a. &
b. ~
c. *
d. #

13. Koks raktažodis reikalingas deklaruojant šabloną?


a. Function
b. Class
c. Typename
d. Virtual

14. taikomas kuriant klasės objektą iš kito objekto


a. Numatytasis konstruktorius
b. Kopijos konstruktorius
c. Pertvarkymo konstruktorius
d. Konstruktorius

15. Funkcija, kurios prototipas yra void get (item*i) gauna


a. Nuorodą į klasę
b. Rodyklę į klasę
c. Nuorodą į objektą
d. Rodyklę į objektą
16. Klasės laukas iš sekcijos prieinamas tik klasės metodui
a. Restricted
b. Private
c. Protected
d. Public

17. Kas nėra paveldima iš bazinės klasės?


a. Public metodas
b. Protected laukas
c. Nė vienas iš išvardintų (o visi kiti ats paveldimi)
d. Numatytasis konstruktorius
Nepaveldima: konstruktorius su argumentais, destruktorius ir objektai.

18. Norint klasės lauką paslėpti nuo likusios programos dalies, jį reikia deklaruoti:
a. Protected
b. Private
c. Public
d. Restriced

19. Ką spausdins programa?


#include <iostream> Using

namespace std; Int main(){

Int *a = new int[5];

For(int i=1; i<=5; i++) *a++=i*10; Cout<<*(--a)<<endl;

Return 0;}

a. 10
b. 50
c. 40
d. Kom
p
klaid
a
20. Kaip deklaruoti postinkremento perkrovimą?
a. Operator++() (PREINKREMENTAS)
b. Int oeprator ++()
c. Operator++(int)
d. *operator++(int)

21. Kuris tipų pertvarkymas reikalauja RTTI mechanizmo?


a. Static_cast
b. Dynamic_cast
c. Const_cast
d. Reinterpret_cast

22. Kas teisinga? (gali būti keli)


a. Pirmą kartą kuriant klasės objektą, kviečiamas klasės konstruktorius
b. Pirmą kartą kviečiant klasės metodą, kviečiamas klasės konstruktorius
c. Kiekvieną kartą kuriant klasės objektą, kviečiamas klasės konstruktorius
d. Kiekvieną kartą kviečiant klasės metodą, kviečiamas klasės konstruktorius

23. Operatorių perkrovimas skirtas:


a. Apibrėžti draugiškai klasei
b. Apibrėžti draugiškai funkcijai
c. Pagelbėti klasės naudotojui
d. Pagelbėti klasės kūrėjui

24. Kaip tvarkytis su išimtimi konstruktoriuje?


a. Išmesti su throw try – maine (ieško žinutės), throw – klasėj (išsiunčia
žinutę), catch – „išspausdina“
b. Gražinti su return
c. Du pirmieji variantai
d. Nė vienas

25. Kuris iš šių duomenų yra abstraktaus tipo?


a. Class
b. Inline (duomenų funkcija)
c. Double
d. Int

26. Ką reiškia daugybinis paveldėjimas?


a. Išvestinė klasė paveldi iš kitos išvestinė klasės, kuri paveldi iš bazinės klasės
b. Išvestinė klasė paveldi iš bazinės klasės
c. Išvestinė klasė paveldi iš daugiau nei vienos bazinės klasės
d. Išvestinė klasė paveldi iš kitos išvestinės klasės

27. Ką spausdins
programa?
28. Ka spausdins
programa?

#include
<iostream> Using
namespace std;
Int main(){
Char s[]= “ABCDEF”;
Char*p
=s+3;
Cout<<p<
<endl;
Return 0;}
a. D
b. DEF
c. ABC
d. Komp klaida

29. Kurie teiginiai teisingi? (gali būti keli)


a. Abstrakti klasė turi virtualų metodą
b. Abstrakčios klasės objektą sukurti galima
c. Abstrakčios klasės objekto sukurti negalima
d. Abstrakti klasė turi grynai virtualią funkciją

30. Raktažodis virtual padaro klasę


a. Išvestine
b. Polimorfine
c. Abstrakčia
d. Bazine

31. Kuriant išvestinės klasės objektą, pirmiau sukuriamas bazinės klasės


objektas
a. Taip
b. Ne

32. Kiek iš viso bus sukurta laukų (t.y. kiek ląstelių atminties skirta
duomenims
saugot)?
#include <iostream> Using

namespace std; Class

Animal{ Protected: int

legs;};

Class Car: public Animal{ Protected: int tail;}; Class MyCat:public

Cat{ Private:int color;};

Int

main

()
{ My

Cat

mc;

Retu

rn 0;

a. 3
b. 1
c. 2
d. Komp klaida ?????????????????????????

33. Ką spausdins
programa?
#include
<iostream> using
namespace std;
Class Animal{
Protected: int legs;
Public: animal():
legs(0){}
};
Class Cat: public Animal{
Private int tail;
Public: Cat(): Animal(), tail(0){}
Void show(){cout<<legs<<tail<<endl;}
};
int main(){
Cat c;
Animal a;
c.show();
a.show();
return0;
}
a. Komp klaida
b. 00
c. 0
d. 11
34. Ką reiškia operatorių perkrovimas?
a. C++ operatoriai dirba su klasių objektais
b. Netinka nė vienas iš išvardintų
c. Suteikiama nauja reikšmė c++ operatoriams
d. Sukuriamas naujas c++ operatorius (c++ neleidžia kurti savų operatorių)

35. Ką spausdins
programa?
#include
<iostream> Using
namespace std;
Class Animal{

Public: virtual void compute(){cout<<”Animal\n”;} };


Class Cat: Public Animal{
Public: void compute(){cout<<”Cat\n”;} };
Int main(){
Cat *c=new Animal;
c- >Animal::compute(); return 0;

a. Cat Animal
b. Cat
c. Animal
d. Komp klaida

36. Kas teisinga? (gali but keli)


a. Negalima sukurti abstrakčios klasės objekto
b. galima sukurti abstrakčios klasės objektą
c. Negalima sukurti polimorfinės klasės objekto
d. galima sukurti polimorfinės klasės objektą

37. Kas iš šių gali būti deklaruotas su raktažodžiu friend?


a. Klasės objektas
b. Funkcija
c. Klasė
d. Niekas iš išv. Negali

38. Kas bus, jei bazinė ir išvestinė klasės turės metodus tuo pat vardu?
a. Visad kviečiamas bazinės klasės metodas
b. Bazinio tipo objektui kviečiamas bazinės klasės objektas (METODAS)
c. visad kviečiamas išvestinės klasės metodas
d. komp klaida

39. Koks čia paveldimumas: class A: public B, private C{};


a. Daugiapakopis
b. Hierarchinis
c. Hibridinis
d. Daugybinis

40. Jei X yra klasės pavadinimas, tai kopijos konstruktorius deklaruojamas:


a. X(const X &x)
b. X(X x)
c. X(X* x) irgi veikia
d. X(const X *x)

41. Ką spausdins programa?


Class base{
Public: void show(){cout<<“Base\n“; };
Class derived: public base{
Public: void show() cout<<“Derived\n“; };
Int main(){
Base *b;
derived d;
B=&d; b-
>show();
Return 0; }

a. Komp klaida
b. Derived Base
c. Base
d. Derived

40. Ką spausdins programa?

a. 01
b. 40

c. 41
d. Komp klaida

41. Bazinė klasė žino išvestinės klasės savybes


a. Taip
b. Ne
42. Kas teisinga?
a. Rodyklė į išvestinės klasės objektą negali būti nukreipta
b. Bazinio tipo rodyklė gali būti nukreipta į išvestinės klasės objektą
c. Bazinio tipo rodyklė negali būti nukreipta į išvestinės klasės objektą
d. Rodyklė į bazinės klasės objektą negali būti nukreipta

43. Kuris teiginys neteisingas operatoriaus perkrovimo atveju?


a. Perkrautas operatorius argumentų sąraše gali turėti klasės objektą
b. Perkrauto operatoriaus argumentų sąrašas gali būti tuščias
c. Perkrautas operatorius turi atitikti originalaus operatoriaus sintaksę
d. Tik esami c++ operatoriai gali būti perkrauti

44. Ką išvestinė klasė gali paveldėti iš bazinės klasės? ( gali būti keli) (negali objektų
paveldėt, konstruktorių su argumentais ir destruktoriaus)
a. Konstruktorius ir destruktorius (konstruktorių gali be argumentų)
b. Tik metodus
c. Tik laukus
d. Laukus ir metodus

45. Jei rodyklei R priskirtas kintamojo K adresas, kaip išspausdinti kintamojo K reikšmę?
a. Cout<<R;
b. Cout<<&R;
c. Cout<<*R;
d. Cout<<<<*K;

46. Ką gali paveldėti išvestinė klasė iš bazinės? (gali būt keli) (private negali paveldėt
nieko)
a. Public metodus
b. Visus laikus
c. Protected laukus
d. Private metodus

47. Kaip deklaruoti grynai virtualiają funkciją?


a. Virtual void show(){}
b. Virtual void show()=pure virtual;
c. Virtual void show()=0;
d. Virtual void show();
48. Ką atspausdins programa?
#include <iostream>
using namespace std;
int main() {
int a[] = {10,20,30,40,50};
int *p = a;
cout << *++p << endl;
system (“pause“);
return 0;
}
a. 20. (jei *p++ tai išves 10)

49. Ką spausdins programa?


#include
<iostream> using
namespace std;
Class Animal{
Protected: int legs;
Public: animal():
legs(2){}
};
Class Cat: public Animal{
Private int tail;
Public: Cat(): Animal(), tail(1){}
Void show(){cout<<legs<<tail<<endl;}
};
int main(){
Cat c;
Animal a;
c.show();
a.show();
return 0;
}
a. Kompiliavimo klaida (nes nėra a.show)

50. Ką atspausdins programa?


#include
<iostream> using
namespace std;
class Animal{
public: ~Animal() { cout << “Animal\n”; } // jei virtual ~Animal, tada
išvestų Cat
};
class Cat: public Animal {
public: ~Cat() { cout << “Cat\n”; }
};
int main() {
Animal *a = new Cat;
delete a;
system(“pause”)
return 0;
}
a. Animal

You might also like