Worksheetsnatív
Total questions: 89
Worksheet time: 1hrs 7mins
1. Mi igaz a friend osztályokra?
A friend osztályok hozzáférhetnek az osztály protected és private tagjaihoz is.
Csak olyan osztály lehet friend, amelyik már korábban definiálva volt.
Csak függvényeket definiálhatunk friend-nek.
A friend reláció kétirányú, azaz ilyenkor az osztályok kölcsönösen hozzáférnek egymás nem publikus tagjaihoz.
Miért fontos a dinamikus memória felszabadítása C++-ban?
A felszabadított memória újra használhatóvá válik a program számára.
Elkerüljük a memóriaszivárgást, amely a memória kifogyásához vezethet.
Nem kell felszabadítani, mert a dinamikusan foglalt memória automatikusan felszabadul a program végén.
Nem fontos, a szemétgyűjtő automatikusan felszabadítja.
Mikor kell a másoló konstruktort és az értékadó operátort megvalósítani?
Akkor, ha az objektum olyan erőforrást használ (pl. dinamikusan foglalt memóriát), aminek a másolásáról nekünk kell gondoskodni
Csak akkor kell megvalósítani, ha a láthatóságukat akarjuk csökkenteni vagy meg akarjuk tiltani a másolást
Nem szükséges, a fordító mindkettőt legenerálja, és azok minden esetben megfelelően működnek
Akkor kell, ha tudjuk előre, hogy az objektumokat majd másolni fogjuk
Mi történik, ha egy olyan osztálynak nem valósítjuk meg a másolását, amelyiknek van egy vector adattagja, ami pointereket tárol?
Lehetnek olyan esetek, amikor nem szükséges a másolás megvalósítása.
Minden esetben rosszul fog működni a program.
Legkésőbb a memória felszabadításánál megszakad a program futása és hibával kilép.
Jól fog működni, a vector tudja, hogyan kell a pointer által mutatott objektumokat lemásolni.
Hogyan tudok beolvasni C++-ban egy int típusú i változóba értéket a standard inputról?
int &j = i; cin >> j;
cin >> i;
cout >> i;
cin >> &i;
Mi a kivételkezelés célja C++-ban?
Különválasztja a hibakezelést a tényleges kódtól, így átláthatóbbá teszi a programot.
Lehetővé teszi, hogy a program futása során fellépő hibákat elegánsan kezeljük.
Segít abban, hogy a hibákat ott kezeljük, ahol azok megoldhatók.
Kivételkezelést csak hálózati hibák esetén lehet használni.
Mi a szerepe az iterátoroknak a C++-ban?
Az iterátorok lehetővé teszik a tárolók elemeinek bejárását típustól függetlenül.
Az iterátorok mindig visszaadják az elemek címét, de nem biztosítanak közvetlen hozzáférést.
Az iterátorok használatával általános algoritmusokat írhatunk, amelyek különböző tárolókon működnek
Az iterátorok segítségével típusfüggetlen tárolókat implementálhatunk.
Miért kell védőfeltételeket alkalmazni a header fájlokban?
Ha többször include-oljuk, akkor például típusdefiníciók vagy a globális változók fordítási hibát okoznának.
Mert a többször deklarált függvények és osztályok fordítási hibát okoznának.
C-ben kötelező volt, és csak a hagyomány miatt alkalmazzák C++-ban is, de nem lenne rá szükség.
Magát a header fájlt védik, hogy ne include-oljon további fájlokat
Melyik állítás igaz az std::map esetében?
Van indexer operátora.
Hatékonyan lehet benne keresni.
Kulcs-érték párokat tárol.
Lehet std::string a kulcs.
Az érték típusra nincs semmi megkötés.
Mi igaz a konstruktor inicializáló listára?
Konstans adattagnak adthatunk értéket
Balról jobbra lesz kiértékelve, és az értékadások is ebben a sorrendben hajtódnak végre
Az ősosztály adattagjait is módosíthatjuk a leszármazott osztály konstruktor inicializáló listájában
Csak ott inicializálhatjuk az osztály adattagjait
C++ esetében hogyan jelezhetjük az operációs rendszer felé, hogy a program rendben lefutott?
A main függvényből egy return 0;-val lépünk ki
A vezérlés elhagyja a main függvényt egyetlen return utasítás nélkül
A main függvény egy pozitív egész számmal tér vissza
A main függvényből egy return OK;-kal lépünk ki
Hogyan tudom egy osztály adattagját megváltoztatn egy const metódusban?
A metódust nem csak const-nak kell deklarálni, hanem mutable-nek is.
Mutable-nak kell deklarálni azokat az adattagokat, amelyeket meg akarok változtatni.
Ilyet nem lehet C++-ban.
Az adott adattag konstans tulajdonságát a const_cast segítéségével eltávolítom, és utána megváltoztathatom.
Melyik állítás igaz egy friend függvényre?
Hozzáfér az adott osztály privát tagjaihoz.
Az osztály tagfüggvénye.
Az egyik paramétere mindig az adott osztály típusú kell legyen.
Csak operátor lehet friend.
Melyikből lehet egynél több is egy osztályban?
Konverziós operátor
i nevű adattag
! operátor
Értékadó operátor
Másoló konstruktor
Hogyan működnek a lambda-captures C++-ban?
A lambda-captures segítségével a lambda-kifejezés hozzáférhet a környező függvény változóihoz.
A lambda-captures lehetővé teszi, hogy a lambda-kifejezés módosítsa a referenciaként átvett
változókat.
A lambda-captures nem használható a lambda-kifejezések belső állapotának kezelésére.
A lambda-captures csak a statikus változókat tudja használni.
Mikor hívódik meg a destruktor automatikusan?
A destruktort csak explicit módon hívhatjuk meg.
Amikor a program befejeződik, és a globális objektumok megszűnnek.
Amikor egy objektum kivétel dobása miatt megszűnik.
Amikor a lokális objektum kilép a hatóköréből.
Mi a különbség az érték szerinti és a referencia szerinti kivétel elkapása között?
Az érték szerinti elkapás mindig hatékonyabb, mint a referencia szerinti.
Nincs különbség a kétféle elkapás között.
Az érték szerinti elkapás esetén az eredeti kivétel objektum állapota nem mindig érhető el.
A referencia szerinti elkapás gyorsabb lehet, mert nem hoz létre másolatot a kivételről.
Miért hasznos a noexcept C++-ban?
A noexcept kötelező minden függvényben, ami nem dob kivételt.
A noexcept azt jelenti, hogy a függvény automatikusan elkapja a kivételeket.
A noexcept használata biztonságosabbá teheti a kódot, mivel előre jelezhetővé válik a függvény
viselkedése.
A noexcept megjelöli, hogy egy függvény nem dobhat kivételt.
Mi a lambda capture szerepe a lambda kifejezésekben?
Csak konstans változók használhatók a lambda capture-ben.
A capture által adott változók módosíthatók is, ha referencia szerint kerülnek átadásra.
Rugalmasan lehetőséget biztosít a külső változók elérésére.
A capture nem engedi, hogy a változókat megváltoztassuk a lambda belsejében.
Ha van az osztálynak egy pointer adattagja, akkor kinek a feladata a pointer által mutatott
memóriaterület felszabadítása?
Lehet olyan eset, hogy automatikusan felszabadul.
Mindig az adott osztálynak kell felszabadítania.
A program tervezésekor el kell dönteni, hogy ki felel a memória felszabadításáért.
Előfordulhat, hogy az osztály megszűnése előtt felszabadul.
Milyen feltételnek kell teljesülnie egy általunk definiált kivétel osztályra?
Meg kell valósítani a publikus what() metódust
Kell lennie publikus paraméter nélküli konstruktorának
Tetszőleges osztályt lehet kivételként használni C++-ban
Az std névtér exception osztályából kell származnia
Mi lehet egy C++ program belépési pontja?
public static int Main() {...}
int main() {...}
int main(int argc, char** argv){...}
void main(int argc, char* argv[]) {...}
Mely esetekben nem lehet példányosítani egy osztályt?
Ha van olyan nem virtuális metódusa, amelyiket nem valósítunk meg
C++-ban mindig lehet példányosítani egy osztályt
Nincs egyetlen publikus konstruktora sem
Van tisztán virtuális metódusa
Hogy adhatom meg egy pointereket tároló set-nek, hogy mit használjon összehasonlításkor?
Nem lehet megadni
Egy osztály megadásával amelyik definiálja a < operátort
Megadhatunk egy függvényt, ami bool típussal tér vissza és két paramétere van (olyan típusúak, amit a set tárol)
Definiálunk egy globális < operátort két pointer típussal
Melyik utasítás okoz biztosan fordítási hibát egy const metódusban, ha i int típusú?
i = 5;
return *this;
i++;
this->i = 5;
++*this;
Melyik állítás igaz az std::vector esetében?
Csak végére lehet beszúrni új elemet.
Tetszőleges elemet képes tárolni.
Rendezve tárolja az elemeket.
Van indexer operátora.
Csak iterátorral lehet bejárni.
Hogyan tudom egy osztály adattagját megváltoztatni egy const metódusban?
A metódust nem csak const-nak kell deklarálni, hanem mutable-nek is.
Mutable-nak kell deklarálni azokat az adattagokat, amelyeket meg akarok változtatni.
Ilyet nem lehet C++-ban.
Az adott adattag konstans tulajdonságát a const_cast segítségével eltávolítom, és utána megváltoztathatom.
Az alábbi állítások közül melyik igaz a pointerre?
A pointernek létrehozásakor értéket kell adni
Egy memóriaterületre csak egy poninter mutathat
Pointerek csak C-ben voltak, C++-ban referenciát kell használni
A pointer nem közvetlenül tárolja a "hasznos adatot", hanem arra a területre mutat, ahol ez tárolódik
Mi történik, ha egy kivételt nem kapunk el C++-ban?
A kezeletlen kivételek futás közben az std::terminate() függvényt hívják meg, amely leállítja a programot.
A program tovább fut, mintha nem történt volna kivétel.
Ha egy kivételt nem kapunk el, a program futása megszakad.
A kivételkezelő rendszer automatikusan keres egy megfelelő catch blokkot a hívási láncban.
Mi igaz a delegating konstruktorra?
A C++ nem támogatja ezt
A hívó és a hívott konstruktorok paraméter számának meg kell egyeznie
Ugyanazon osztály egy másik konstruktorának inicializáló listájából hívható
Olyan speciális konstruktor, amit az osztályon kívülről nem lehet hívni
Mi a hasonlóság a másoló konstruktor és az értékadó operátor között?
Minkettőt az objektum létrehozásakor használjuk
Mindkettő az objektum másolását végzi
Egy osztálynak csak egy másoló konstruktora és egy értékadó operátora lehet
A kettő ugyanaz, csak a nevük tér el
Melyik állítás igaz a másoló konstruktorra?
Ha implementáljuk, akkor az objektum másolása előtt fel kell szabadítani a már lefoglalt memóriát.
Ha a másoló konstruktort megvalósítjuk, akkor ajánlott az értékadó operátort is megvalósítani.
Egy osztálynak csak egy másoló konstruktora lehet.
A fordító generál egy másoló konstruktort, ha nem implementáljuk.
Miért fontos a dinamikus memória felszabadítása C++-ban?
Nem kell felszabadítani, mert a dinamikusan foglalt memória automatikusan felszabadul a program végén.
A felszabadított memória újra használhatóvá válik a program számára.
Elkerüljük a memóriaszivárgást, amely a memória kifogyásához vezethet.
Nem fontos, a szemétgyűjtő automatikusan felszabadítja.
Mi igaz a destruktorra?
Csak egy lehet belőle.
Ha nem valósítjuk meg, akkor a fordító legenerálja.
Csak itt szabadíthatjuk fel az osztály által lefoglalt memóriát.
Lehet virtuális vagy konstans is.
Mit nem lehet megváltoztatni az operátor-kiterjesztés esetében?
A paraméterek számát
Az operátor nevét
A visszatérés típusát
Az operátor prioritását
Hogyan dobunk kivételt C++-ban?
Kivételként bármilyen típusú objektumot dobhatunk, de ajánlott kivétel osztályokat használni.
A throw kulcsszóval lehet kivételt dobni.
A throw automatikusan megoldja a hibát, ha kivételt dob.
Csak primitív típusokat, például int vagy char lehet kivételként dobni.
Mi a kivételkezelés célja C++-ban?
Segít abban, hogy a hibákat ott kezeljük, ahol azok megoldhatók.
Lehetővé teszi, hogy a program futása során fellépő hibákat elegánsan kezeljük.
Kivételkezelést csak hálózati hibák esetén lehet használni.
Különválasztja a hibakezelést a tényleges kódtól, így átláthatóbbá teszi a programot.
Miért hasznos a noexcept C++-ban?
A noexcept azt jelenti, hogy a függvény automatikusan elkapja a kivételeket.
A noexcept használata biztonságosabbá teheti a kódot, mivel előre jelezhetővé válik a függvény viselkedése.
A noexcept kötelező minden függvényben, ami nem dob kivételt.
A noexcept megjelöli, hogy egy függvény nem dobhat kivételt.
Mit csinál a for_each algoritmus C++-ban?
A for_each mindig megszakítja a végrehajtást, ha egy feltétel nem teljesül
A for_each csak arra szolgál, hogy elemeket töröljünk egy tárolóból
A for_each automatikusan rendez egy tárolót
A for_each végigiterál egy tároló elemein és mindegyikre végrehajt egy adott műveletet
Melyik állítás igaz a C++-os kivételkezelésre?
A catch ( ... ) tetszőleges kivételt elkap
Egy elkapott kivételt a throw; utasítás segítségével eldobhatunk
A finally minden esetben lefut egy try blokk után
A kivételt mindig referencia szerint kell elkapni
Mire jó a using namespace std; ?
Ilyenkor nem kell include-olni az iostream, hogy hasznalhassuk a cin-t es a cout-ot
Enélkül nem tudnánk használni a cout-ot
A fordító a többi scope mellett az std névtérben is keres majd, amikor névfeloldást végez
Így definiálom az std névteret
Miért használunk másoló konstruktort C++-ban?
Segít a mély másolat készítésében, ha az objektum dinamikusan foglalt memóriát használ.
Automatikusan meghívódik, amikor egy objektumot érték szerint adunk át egy függvénynek.
A fordító (általában) generál egy alapértelmezett másoló konstruktort, ha nem definiálunk sajátot.
A másoló konstruktor törli a dinamikus memóriát az eredeti objektumból.
Mit jelent a rövidített kiértékelés az operátorok esetében?
Azt, hogy ha egy logikai kifejezés kiértékelésekor valamelyik részkifejezés alapján egyértelműen el lehet dönteni a kifejezés értékét, akkor a kifejezés többi része nem lesz kiértékelve
A logikai kifejezés kiértékelése során csak addig lesznek kiértékelve a részkifejezések, amíg el nem lehet dönteni az egész kifejezés igazságtartalmát
A szabvány ajánlása, hogy a fordító olyan sorrendben értékelje ki a kifejezést, hogy az várhatóan
optimális legyen
A fordító optimalizációja, hogy a hosszú kifejezéseket mindig rövide értékelje ki
Miért fontos a dinamikus memória felszabadítása C++-ban?
Nem fontos, a szemétgyűjtő automatikusan felszabadítja.
A felszabadított memória újra használhatóvá válik a program számára.
Elkerüljük a memóriaszivárgást, amely a memória kifogyásához vezethet.
Nem kell felszabadítani, mert a dinamikusan foglalt memória automatikusan felszabadul a program végén.
Melyik esetben jön létre egy példány az Example osztályból (azaz Example típusú objektum)? (class Example {/ ... /};)
throw Exception();
Example e3();
Example &e5 = ee; // ahol ee Example tipus objektum
Example e2 =(Example)malloc(sizeof(Example));
Mi a lambda capture szerepe a lambda kifejezésekben?
A capture nem engedi, hogy a változókat megváltoztassuk a lambda belsejében.
Rugalmasan lehetőséget biztosít a külső változók elérésére.
Csak konstans változók használhatók a lambda capture-ben.
A capture által adott változók módosíthatók is, ha referencia szerint kerülnek átadásra.
Mi igaz a konstruktor inicializáló listára?
Az ősosztály adattagjait is módosíthatjuk a leszármazott osztály konstruktor inicializáló listájába
Konstans adattagnak adthatunk értéket
Balról jobbra lesz kiértékelve, és az értékadások is ebben a sorrendben hajtódnak végre
Csak ott inicializálhatjuk az osztály adattagjait
Melyik állítás igaz a destruktorra?
Felszabadítja az objektum által használt erőforrásokat.
Nem lehet paramétere.
A destruktor neve megegyezik az osztály nevével, előtte egy tilde jellel.
Meghívhatom a destruktort.
Mi a hasonlóság a másoló konstruktor és az értékadó operátor között?
A kettő ugyanaz, csak a nevük tér el
Minkettőt az objektum létrehozásakor használjuk
Egy osztálynak csak egy másoló konstruktora és egy értékadó operátora lehet
Mindkettő az objektum másolását végzi
Mikor kapunk fordítási hibát, ha a final módosítót alkalmazzuk egy metódusra?
Ha a metódus nem virtuális
Ha a metodus nem definial felul egy orokolt metodust
Ha a metodus statikus
A final-t csak osztályra lehet alkalmazni
Mi a szerepe az iterátoroknak a C++-ban?
Az iterátorok segítségével típusfüggetlen tárolókat implementálhatunk.
Az iterátorok mindig visszaadják az elemek címét, de nem biztosítanak közvetlen hozzáférést.
Az iterátorok lehetővé teszik a tárolók elemeinek bejárását típustól függetlenül.
Az iterátorok használatával általános algoritmusokat írhatunk, amelyek különböző tárolókon működnek.
Miert hasznos a noexcept C++-ban?
A noexcept kötelező minden függvényben, ami nem dob kivételt.
A noexcept megjelöli, hogy egy függvény nem dobhat kivételt.
A noexcept használata biztonságosabbá teheti a kódot, mivel előre jelezhetővé válik a függvény viselkedése.
A noexcept azt jelenti, hogy a függvény automatikusan elkapja a kivételeket.
Melyik állítás igaz a C++-os kivételkezelésre?
A catch (...) tetszőleges kivételt elkap
Egy elkapott kivételt a throw; utasítás segítségével eldobhatunk
A finally minden esetben lefut egy try blokk után
A kivételt mindig referencia szerint kell elkapni
Mi a különbség a statikus és dinamikus kötés között?
A statikus kötés fordítási időben, míg a dinamikus kötés futásidőben dől el.
A statikus kötés esetén a fordító az objektum statikus típusa alapján dönt, melyik metódust hívja meg.
A dinamikus kötéshez a metódusokat virtuálissá kell tenni, hogy futásidőben a leszármazott osztály metódusa hívódjon meg.
Egy osztálynak nem lehetnek egyszerre statikus és dinamikus kötéssel hívható metódusai.
Milyen módon lehet inicializálni az osztály adattagjait?
Konstruktor inicializáló lista használatával.
Lehet alapértelmezett értéket adni az adattagnak.
Delegating konstruktor segítségével.
Setter metódusok meghívásával.
Melyik állítás igaz a protected tagokra?
A leszármazott osztályban is mindig protected lesz.
A konstruktor lehet protected láthatóságú.
A getter és setter metódusok láthatósága lehet protected
Csak az adott osztály fér hozzá.
A destruktor lehet protected láthatóságú.
Az alábbiak közül melyik nem specifikált viselkedés?
Függvényhívás esetén a paraméterlista kiértékelési sorrendje.
Tömb túlindexelés.
"return 0;" elhagyása a main függvényből.
nullptr dereferencia.
Nem inicializált változó használata.
Mi igaz a konstruktor inicializáló listára?
Az ősosztály adattagjait is módosíthatjuk a leszármazott osztály konstruktor inicializáló listájában
Csak ott inicializálhatjuk az osztály adattagjait
Konstans adattagnak adhatunk értéket
Balról jobbra lesz kiértékelve, és az értékadások is ebben a sorrendben hajtódnak végre
Mely esetekben nem lehet példányosítani egy osztályt?
Ha van olyan nem virtuális metódusa, amelyiket nem valósítottunk meg
C++-ban mindig lehet példányosítani egy osztályt
Van tisztán virtuális metódusa
Nincs egyetlen publikus konstruktora sem
C++ esetében hogyan jelezhetjük az operációs rendszer felé, hogy a program rendben lefutott?
A main függvényből egy return 0;-val lépünk ki
A main függvény egy pozitív egész számmal tér vissza
A vezérlés elhagyja a main függvényt egyetlen return utasítás nélkül
A main függvényből egy return OK;-kal lépünk ki
Milyen esetekben használhatjuk a const_cast operátort?
Ha el akarjuk távolítani a const módosítót egy változóból.
Használható érték típusok, például int esetén.
Például egy const char* típusú mutatót char* típusra konvertálhatunk.
A const_cast minden esetben biztonságos, bármikor eltávolíthatjuk a const-ot bármiről.
Hasznos lehet függvényekben, ha const típusú paramétert kell módosítani.
Mi a különbség a static_cast és a dynamic_cast között?
A dynamic_cast ellenőrzi, hogy a konverzió helyes-e, és null pointerrel tér vissza sikertelenség esetén.
A dynamic_cast csak polimorf osztályok között használható.
A static_cast fordítási időben történik, míg a dynamic_cast futásidőben.
A nem használható alap típusok között.
A static_cast használatához RTTI-re van szükségünk.
Mi a különbség az érték és a referencia szerinti paraméterátadás között?
A referencia szerinti átadás csak primitív típusokra érvényes.
Az érték szerinti átadásnál mindig az eredeti objektumot módosítjuk.
A referencia szerinti átadásnál az eredeti objektumot módosíthatjuk.
A referencia szerinti átadás gyorsabb lehet nagy objektumok esetén.
Az alábbi állítások közül melyik igaz a pointerre?
A pointernek létrehozáskor értéket kell adni
Pointerek csak C-ben voltak, C++-ban referenciát kell használni
Egy memóriaterületre csak egy pointer mutathat
A pointer nem közvetlenül tárolja a "hasznos adatot", hanem arra a terület mutat, ahol ez tárolódik
C++-ban mi a különbség a class és a struct között?
Nincs különbség, teljesen ugyanazt jelentik
Az alapértelmezett láthatóság a class esetében private, míg a struct esetében public
Hasonló a kettő, de a struct-ból nem lehet örökölni
A struct az a C-s struktúra, míg a class az a C++-os osztály
Melyik nem egy C++ tároló az STL-ben?
set
List
map
vector
HashMap
Mikor kell a másoló konstruktort és az értékadó operátort megvalósítani?
Akkor, ha az objektum olyan erőforrást használ (pl. dinamikusan foglalt memóriát), aminek a másolásáról nekünk kell gondoskodni
Nem szükséges, a fordító mindkettőt legenerálja, és azok minden esetben megfelelően működnek
Akkor kell, ha tudjuk előre, hogy az objektumokat majd másolni fogjuk
Csak akkor kell megvalósítani, ha a láthatóságukat akarjuk csökkenteni vagy meg akarjuk tiltani a másolást
Melyikből lehet egynél több is egy osztályban?
! operátor
Másoló konstruktor
Értékadó operátor
i nevű adattag
Konverziós operátor
Melyik esetben jön létre egy példány az Example osztályból (azaz Example típusú objektum)? (class Example {/* ... */};)
throw Exception();
Example &e5 = ee; // ahol ee Example tipus objektum
Example e2 = (Example)malloc(sizeof(Example)
Example e3();
Mit jelent az, hogy egy metódus statikus?
Az osztály példányosítása nélküli is hívható.
Csak az adott osztály statikus metódusait hívhatja közvetlenül.
Használhatja a this pointert.
Lehet const.
Statikus meódusban nem lehet statikus lokális változó.
Hogyan tudok beolvasni C++-ban egy int típúsú i változóba értéket a standard inputról?
int &j = i; cin >> j;
cin >> i;
cout >> i;
cin >> &i;
Mi történik, ha egy osztályban nem definiálunk konstruktort?
Az osztály minden adattagja automatikusan inicializálódik nullával.
Ha van nem triviálisan inicializálható adattag, a fordító nem generál konstruktort.
Az osztály nem fordul le.
A fordító generál konstruktorokat a megfelelő paraméterrel.
Melyik igaz a virtualis metódusokra?
Virtuális metódusok esetén a C++ futásidőben dönti el, melyik metódust hívja meg.
A konstruktor lehet virtuális.
Ahogy Javaban, úgy C++-ban is minden metódus alapból virtuális.
A virtual kulcsszó lehetővé teszi a dinamikus kötést, ami a polimorfizmus alapja.
Miért hasznos az explicit típuskonverzió?
Mindig biztonságosabb, mint az implicit konverzió.
Lehetővé teszi, hogy a programozó specifikálja a típusváltás módját.
Automatikusan végrehajtódik futásidőben.
Megelőzi az automatikus típuskonverzió által okozott hibákat.
Használható bármilyen kompatibilis vagy nem kompatibilis típus között.
Mi igaz az implicit típuskonverzióra?
Nem igényel explicit utasítást a programozótól.
Kockázatot jelenthet, ha értékvesztéssel jár (pl. double-ról int-re konvertálunk).
Csak osztályok esetében használható.
Például egy int változót double típusra konvertál.
Elvégezheti az alapértelmezett típus-promóciót, mint például short típusról int-re.
Mi igaz a class Example{}; osztály konstruktorára?
A neve csak Example lehet
Csak publikus lehet a láthatósága
Csak egy másoló konstruktora lehet, amit Example (const Example&){/*.....*/} módon kell megadni
A fordító minden esetben generál egy konstruktort
Hogyan működik a set elemeinek rendezése?
A rendezéshez a set a < operátort használja.
A set használhat egyedi összehasonlító függvényt a rendezéshez.
A set == operátor segítségével dönti el, hogy két elem egyenlő vagy sem
A set elemei alapértelmezés szerint növekvő sorrendben vannak rendezve.
Mikor ajánlott virtuálissá tenni a destructort?
Minden esetben.
Akkor, ha polimorfikusan akarjuk törölni.
Akkor, ha az osztályból származtatunk további osztályokat.
Akkor, ha van virtuális metódusa.
Mire jó a using namespace std; ?
A fordító a többi scope mellett az std névtérben is keres majd, amikor névfeloldást végez
Ilyenkor nem kell includeolni az iostream -et, hogy használhassuk a cin-t és a cout-ot
Enélkül nem tudnánk használni a cout-ot
Így definiálom az std névteret
Mit nem lehet változtatni az operátor-kiterjesztés esetében?
A paraméterek számát
Az operátor nevét
Az operátor prioritását
A visszatérés típusát
Milyen feltételnek kell teljesülnie egy általunk definiált kivétel osztályra?
Az std névtér exception osztályából kell származnia
Meg kell valósítani a publikus what() metódust
Tetszőleges osztályt lehet kivételként használni C++-ban
Kell lennie publikus paraméter nélküli konstruktorának
Mit jelent a rövidített kiértékelés az operátorok esetében?
Azt, hogy ha egy logikai kifejezés kiértékelésekor valamelyik részkifejezésalapján egyértelműen ellehet dönteni a kifejezés értékét, akkor a kifejezés többi rész nem lesz kiértékelve
A szabvány ajánlása, hogy a fordító olyan sorrendben értékelje ki a kifejezést, hogy az várhatóan optimális legyen
A logikai kifejezés kiértékelése során csak addig lesznek kiértékelve a részkifejezések, amíg el nem lehet dönteni az egész kifejezés igazságtartalmát
A fordító optimalizációja, hogy a hosszú kifejezéseket mindig rövide értékelje ki
Melyik esetben keletkezik undefined behavior C++-ban?
Nem inicializált változót használunk.
Ha egy függvény neve ugyanaz, mint egy változó neve.
Ha egy előjeles egész túlcsordul.
Ha egy tömböt túlindexelünk.
Mi a különbség a new és new[] operátorok között?
A new hiba esetében kivételt dob, míg a new[] nullptr-rel tér vissza
Az new-val egy objektumnak foglalunk helyet, a new[] több elemnek is képes helyet foglalni
Nincs különbség köztük, csak az írásmódjuk tér el
A new ugyanaz mint a malloc, de a new[]-nak nincs C-s megfelelője
Mikor kapunk fordítási hibát, ha a final módosítót alkalmazzuk egy metódusra?
Ha a metódus nem definiál felül egy örökölt metódust
A final kulcsszó Javaban van, C++-ban nincs
A final-t csak osztályra lehet alkalmazni
Ha a metódus nem virtuális
Mi a C++ union lényege?
Az union egyszerre csak egy adattagot tárol
Minden adattag ugyanazon a memóriaterületen osztozik
Használható olyan adatok tárolására, amelyek sose lesznek egy idejűleg hasznűlatban
Az union egyszerre több adattagot is képes tárolni
Az union kizárólag primitív típusokat tárolhat
Mi történik akkor ha egy kivételt nem kapunk el C++-ban?
Ha egy kivételt nem kapunk el a program futása megszakad
A kezeletlen kivételek futás közben az std::terminate() függvényt hívják meg, amely leállítja a programot
A kivételkezelő rendszer automatikusan keres egy megfelelő catch blokkot a hívási láncban
A program tovább fut mintha nem történt volna kivétel
Mi a különbseg a copy es a copy_if algoritmusok között?
A copy minden elemet másol, míg a copy_if csak azokat az elemeket, amelyek megfelelnek egy
feltételnek.
A copy_if egy predikátumot használ, amely meghatározza, hogy egy elem másolásra kerül-e.
A copy a megadott intervallum összes elemét másolja, a copy_if pedig szelektíven másolja az elemeket.
A copy_if automatikusan torli az elemeket, ha nem felelnek meg a feltételnek.
Miért nem tárolhatók érték szerint az örökléssel létrehozott objektumok a C++ tárolókban?
Mert a tárolók csak az ősosztály memóriaterületét foglalják le, így a leszármazott osztály extra adatai
elvesznek.
A tároló csak az ősosztály részét másolja, a leszármazott osztály extra tulajdonságai nem kerülnek
eltárolásra.
Az öröklött objektumokat referencia segítségével kell tárolni, ha az egész objektumot meg akarjuk őrizni.
Akkor tárolható, ha a leszármazott osztály nem ad az ősosztályhoz plusz adattagot.
