Egységbezárás, adatelrejtés, konstruktorok, destruktorok. OOP + névterek, láthatóság, hatókör, túlterhelés Flashcards
Egységbezárás
mit jelent az egységbezárás?
Az adatok és az azokat kezelő függvények összekapcsolása. Tehát a procedurális programozással szemben nem mindenfele vannak deklarálva a függvények és változók, hanem osztályokban.
Adatelrejtés
Ezáltal milyen elvet alkalmazunk?
Azzal, hogy az egymáshoz tartozó függvényeket és változókat egy fedél alá helyezzük, társulhat (és minden esetben társul is) az adatelrejtés elve.
mi az az adatelrejtés elvének a lényege?
Az adatok elrejtése az objektumorientált programozás egyik leglényegesebb és legfontosabb jellemzője a C++-ban. Az adatelrejtés arra utal, hogy az adatokról csak a lényeges információkat adjuk meg a külvilág számára, elrejtve a háttérben lévő részleteket vagy a megvalósítást.
Láthatóság
Mi a private?
Az osztály privatenak nyilvánított tagjai csak az osztályon belüli tagfüggvények által érhetők el. Az osztályon kívüli objektumok vagy függvények nem érhetik el őket közvetlenül.
Mi a public?
“Public” : A public specifikátor alatt deklarált összes osztálytag mindenki számára elérhető lesz. A “public”-ként deklarált adattagokat és tagfüggvényeket más osztályok és függvények is elérhetik. Egy osztály publifc tagjai a program bármely pontjáról elérhetők a közvetlen tagelérési operátor (.) használatával az adott osztály objektumával.
Mi a protected?
A protected hozzáférés módosító hasonló a private hozzáférés módosítóhoz abban az értelemben, hogy az osztályon kívül nem lehet hozzáférni, a különbség az, hogy a protectedként deklarált osztálytagokhoz az adott osztály bármely alosztálya (származtatott osztály) is hozzáférhet.
példa.
Mutass példát az összes előzőre. Class deklaráció. Animal
include
using namespace std;
// Ősosztály class Animal {
// Privát változók, kívülről nem érhetők el private: string name; int age; int legs; // Protected csak az ősosztály számára érhető el protected: string breed; //Getterek, setterek konstruktor public, hogy lehessen használni a class-t. public: Animal(string name, int age, int legs, string breed) { this->name = name; this->age = age; this->legs = legs; this->breed = breed; }
példa. Getterek és setterek.
string getName() { return this->name; } void setName(string name) { this->name = name; } int getAge() { return this->age; } void setAge(int age) { this->age = age; } int getLegs() { return this->legs; } void setLegs(int legs) { this->legs = legs; } string getBreed(){ return this-> breed; } void setBreed(string breed) { this-> breed = breed; } };
példa. Örökölt osztály. Mammal
// Öröklünk az Animalból, tehát minden ami abban benne van, benne lesz ebben is. class Mammal: public Animal { // Private itt is csak ebben az osztályban érhető el. private: string breathing; // Public ugyanígy getter setter és a konstruktor public: string getBreathing() { return this->breathing; } void setBreathing(string breathing) { this->breathing = breathing; } Mammal(string name, int age, int legs, string breed, string breathing): Animal(name, age, legs, breed) { this->breathing =breathing; } };
példa. main fgv. Animal
int main() { //Animal példány, konstruktorral értékadás Animal animal("Bob", 5, 4, "Cat");
// A konstruktorral adott értékeket a getterekkel lekérjük, kiiratjuk cout << animal.getName()<< ", " << animal.getAge() << ", " << animal.getLegs()<< ", "<< animal.getBreed()<< endl;
// Setterekkel állítunk az értékeken, NEM lehet olyan hogy animal.name = “George”, mivel private a mező
//nem látjuk magát az Animal osztály name mezőjét, csak a gettert.
animal.setName(“George”);
animal.setAge(1);
animal.setLegs(2);
animal.setBreed(“Parrot”);
// Kiiratjuk az új értékeket cout << animal.getName()<< ", " << animal.getAge() << ", " << animal.getLegs()
példa. mmain fgv. Mammal
// Mammal példány, eggyel több változóval Mammal mammal("Rufus", 3, 4, "Dog", "Lung");
// Kiiratás cout << mammal.getName()<< ", " << mammal.getAge() << ", " << mammal.getLegs()
Konstrukturok
Mi a konstruktor?
Egy konstruktor-függvény, mint ahogy a neve mutatja, felépít egy osztályt, vagyis inicializálhatja az új objektum alapértékeit.
a konstruktor fgvek hogyan és mikor kerülnek meghívásra?
A konstruktor-függvények automatikusan meghívásra kerülnek, amikor példányosítunk egy osztályt (vagyis objektumot hozunk létre az osztály alapján).
A konstruktor milyen fgv, milye nincs?
A konstruktor olyan függvény, melynek nincsen visszatérési típusa, tehát még a void kulcsszót sem kell kiírni a neve elé
minek kell egyeznie egy konstruktorban mivel?
A konstruktor függvény neve meg kell, hogy egyezzen az osztály nevével c++-ban.
Legalább mivel rendelkezik minden osztály?
Minden osztálynak legalább 1 konstruktora van.
Hogyan és mit lehet csinálni egy konstruktorral? Mire kell vigyázni?
Egy osztálynak lehet több konstruktora is (tehát túlterhelhető - overloading), csak arra kell vigyázni, hogy a paraméterezésük legyen különböző, vagyis nem lehet kétszer deklarálni ugyanazt a paramétertípust elfogadó konstruktort.
Névterek
Mi a névtér?
A névtér egy olyan ’régió’, ami a ’neveknek’ (a típusok, függvények változók neveinek) hatókört ad.