Osztályok és objektumok, Öröklés és Példányosítás Flashcards

1
Q

Mi az OOP fogalma?

A

Olyan programozási technika, amely a programokat objektumokból építi fel. A program működése tulajdonképpen objektumok (minden objektumnak megvan a jól meghatározott feladata) kommunikációját jelenti. Legfontosabb alapelvei: egységbezárás, öröklődés, polimorfizmus.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

mi az osztály?

A

Osztály (Class): Az osztály egy felhasználói típus, amelynek alapján példányok (objektumok) hozhatók létre. Az osztály alapvetően adat és metódus (művelet) definíciókat tartalmaz.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Mi az objektum?

A

Objektum (példány): Információt (adatokat) tárol és kérésre műveleteket végez. Van állapota, viselkedése és futásidőben azonosítható. Egy osztály példánya.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Mi az osztálydeklaráció kulcsszava

A

class

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

mutass példát egy osztályra

A
class Person
{
    // Access specifier
    public:
    Person(string inputName){
    name = inputName;
    }
    // Data Members
    string name;
    // Member Functions()
    void printname()
    {
       cout << "Name is: " << name;
    }
};
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Az osztály tagjai.

Mik a mezők?

A

mezők: az objektum aktuális állapotát tárolják

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Mik a metódusok?

A

metódusok: valamilyen művelet végeznek el, ez lehet mezők értékének lekérdezése vagy megváltoztatása az adott objektumon

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Mik a konstruktorok?

A

konstruktorok: az objektum létrehozásakor végzi a mezők beállítását általában, de bármilyen logikát lehet benne implementálni, legtöbbször tényleg mezők kezdőértékének beállítását végzi.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Mezők

Mik a mezők jellemzői?

A

Definiáláskor meg kell adni a mezőben tárolandó adat típusát – Nevet kell kapjon a mező, mivel ezen a néven lehet rá hivatkozni később – A definícióban van lehetőség kezdőérték beállításra is – Kezdőértéket még konstruktorban vagy inicializáló blokkban is meg lehet adni.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Metódusok

egy metódus definiálásakor mire kell figyelni?

A

Minden metódus/ függvény – Definiáláskor meg kell adni a visszaadott érték típusát – Visszaadott érték hiányában – ekkor eljárásról beszélünk – a definícióban a void kulcsszót kell megadni

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Mire kell figyelni ha egy metódusnak adtunk visszatérési értéket?

A

Ha van visszaadott érték, akkor kötelezően kell paraméteres return utasításnak is szerepelnie a metódusban (több is szerepelhet), és a vezérlésnek mindenképpen el kell érnie

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Eljárásnál miért nem szükséges a return?

A

Eljárásnál nem szükséges kiírni a return utasítást, a fordító automatikusan elhelyez egyet a metódus utolsó végrehajtott utasítása és a blokkzáró zárójel közé

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Mit lehet csinálni a metódusokkal ugyanazon a néven?

A

Ugyanazon a néven, de más paraméterezéssel (paraméterek típusa, darabszáma) lehet egyszerre több metódust is definiálni (metódusok túlterhelése)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Mi jellemző a private típusú metódusokra?

A

private minősítésű metódust más típusú objektumból kívülről nem lehet elérni, csak az adott, vagy azonos típusú objektumok metódusai tudnak hozzáférni, meghívni.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Hatáskör:

Mit tudsz a hatáskörről az osztályokkal kapcsolatban?

A

Minden osztály egy önálló osztály-hatáskört definiál. (Egységbezárás alapelve!) A meződeklarációk lokálisak az osztályhatáskörre nézve. A tagfüggvények egy hatáskörben vannak az adattagokkal => használhatják azokat!

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Osztály használata:

hogyan zajlik egy osztály használata?

A

Az osztálynév típusnévként viselkedik, és minden eddig ismert deklarációs konstrukcióban használható. Objektum: az osztály egy előfordulása. Például: osztály típusú változó

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Hogy lehet a tagra hivatkozni?

A

Hivatkozás a tagokra Analóg a struktúrák kezelésével. Tehát: objektumnév.mező vagy objektum_pointer->mező A mező lehet adattagra való hivatkozás (pontosan úgy, mint a struktúránál), tagfüggvény neve és aktuális paraméter-listája

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Mik az osztály Hozzáférést szabályozó módosítói 1.?

A

public: a mező írható/olvasható bármelyik másik objektumpéldányból

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Mik az osztály Hozzáférést szabályozó módosítói 2.?

A

private: a mező közvetlenül csak az adott osztályból, vagy csak metódusokon keresztül (get/set metódusok) érhető el

20
Q

Mik az osztály Hozzáférést szabályozó módosítói 3.?

A

protected: a mező csak a leszármazott osztályokban látható, illetve az osztályt tartalmazó csomagban

21
Q

Objektum létrehozása:

Mi a folyamata egy objektum létrehozásának?

A

: • helyfoglalás az adattagoknak • konstruktor automatikus meghívása.

22
Q

írj egy példát az objektum létrehozására.

A

Person person(“Bob”);

23
Q

Konstruktorok.

Mi a konstruktor neve?

A

Neve egyezik az őt tartalmazó osztály nevével.

24
Q

Mi a konstruktor visszaadott értéke?

A

Nincs jelzett visszaadott értéke, még void sem

25
Q

Mit nevezünk implicit konstruktornak?

A

A publikus, paraméter nélküli, üres törzsű konstruktort implicit konstruktornak nevezzük

26
Q

MI történik ha nem írunk konstruktort az osztályba?

A

Ha nem írunk implicit konstruktort, és nincs paraméteres változat sem, akkor a fordító létrehoz egyet

27
Q

Hányszor fut le a konstruktor?

A

A konstuktorok pontosan egyszer futnak le a használat során

28
Q

Mi történik, ha több konstruktort definiálunk?

A

Ugyanazon a néven, de más paraméterezéssel (paraméterek típusa, darabszáma) lehet egyszerre több konstruktort is definiálni (konstruktorok túlterhelése) Ezek közül a példányosításkor az osztály neve után írt paraméterlistával tudunk választani.

29
Q

Destruktor:

Mi a Destruktor?

A

neve ~osztálynév. Nem lehet visszatérési értéke (még void sem!) Nincs paraméterlistája, nem hívható meg közvetlenül, nem öröklődik. Automatikusan meghívódik egy objektum megszűnésekor. Erőforrásfelszabadítási logikát tartalmaz általában.

30
Q

Mutass példát a konstruktor destruktorra.

A

include

class Pelda
{
public:
    Pelda()
    {
        std::cout << ( void* )this << ": Pelda()" << std::endl;
    }
    ~Pelda()
    {
        std::cout << ( void* )this << ": ~Pelda()" << std::endl;
    }
};
int main()
{
    Pelda tomb[ 3 ];
}
Kimenete egy konkrét rendszeren egy futtatáskor (a kettőspont előtt az objektum virtuális címe olvasható):

0x7fffffffbeb0: Pelda()
0x7fffffffbeb1: Pelda()
0x7fffffffbeb2: Pelda()
0x7fffffffbeb2: ~Pelda()
0x7fffffffbeb1: ~Pelda()
0x7fffffffbeb0: ~Pelda()

31
Q

A megszüntetés sorrendje a létrehozás sorrendjének a fordítottja, miért?

A

Mert képzeljük el, hogy létrehozunk két objektumot úgy hogy a másodikban hivatkozást helyezünk el az elsőre (például egy mutatóval mutatunk rá). Ha a megszüntetés sorrendje nem lenne fordított, akkor egy instabil állapoton haladna keresztül a program látókörből való kilépéskor.

32
Q

Mi a this c++-ban?

A

A “this” egy kulcsszó, amely az osztály aktuális példányára utal.

33
Q

Példával szemléltesd a this használatát.

A

Person(string inputName, int age){
this ->age = age;
name = inputName; }

34
Q

Öröklés.

Mi az öröklés fogalma?

A

olyan alapvető programozási technika, amely lehetővé teszi, hogy a már meglévő osztályainkból újakat tudunk származtatni, valamint az egymással kapcsolatban álló osztályokat hierarchiába tudjuk rendezni.

35
Q

mi az ősosztály?

A

Az az osztály, amiből kiindulunk, azaz melynek tulajdonságai tovább vannak örökítve.

36
Q

mi a leszármazott osztály?

A

Az az osztály, amiben felhasználjuk az ősosztályt, azaz amely örökli a tulajdonságokat.

37
Q

mutass Példát az öröklésre.

A
class Person
{
    // Access specifier
    public:
    Person(string inputName, int age){
        this ->age = age;
    name = inputName;
    }
    ~Person() {
    cout << "Object Deleted!"<< endl;
    }
    // Data Members
    string name;
    int age;
    // Member Functions()
    void printname()
    {
       cout << "Geekname is: " << name << endl;
    }
    void printAge() {
    cout << age << endl;
    }
};

class Student : public Person {
public:
Student(string inputName, int age, string occupation): Person(inputName, age) {
cout<

38
Q

Példányosítás.

Mi a példányosítás?

A

A példányosítás nem más, mint az osztály által meghatározott struktúrából és viselkedésből (változók, metódusok és operátorok) képzett objektum létrejötte.

39
Q

Egy osztályból hány objektum képezhető?

A

Akárhány.

40
Q

az objektumok viselkedését mi alakítja?

A

Ezek viselkedését az objektum mezők értéke és a függvényekben implementált logika alakítja.

41
Q

Milyen objektum az osztály milye?

A

A példányosított objektum az osztály leképezése, megvalósítása.

41
Q

Milyen objektum az osztály milye?

A
42
Q

A példányosítás során mire van lehetőségünk? Ha ezt nem tesszük meg mi történik?

A

Példányosítás során lehetőségünk van a kezdőértékeket a konstruktor(ok) segítségével beállítani. Hanem választunk ki értékbeállításra való konstruktort, akkor az alapértelmezett konstruktor fog működésbe lépni.

43
Q

Mutass példát a példányosításra.

A
Person person("Bob", 15);
Student student("Joe", 16, "Student");
44
Q

Meddig léteznek ezek a példányok?

A

Ezek a példányok a memóriába kerülnek és addig léteznek, amíg az adott hatókör létezik. Ha egy függvényben hozzuk létre, akkor a függvény lefutása után a destruktor felszabadítja az általuk foglalt memóriát. Mivel a main is egy függvény, így a main függvény lefutása után, azaz a program utolsó futtatott utasítása után is a destruktor lefut minden memóriában lévő objektumra.