pure virtual function
Angol
Főnév
pure virtual function (tsz. pure virtual functions)Kategória:angol lemmák#PURE%20VIRTUAL%20FUNCTIONKategória:angol főnevek#PURE%20VIRTUAL%20FUNCTIONKategória:angol megszámlálható főnevek#PURE%20VIRTUAL%20FUNCTIONKategória:angol kifejezések#PURE%20VIRTUAL%20FUNCTION
- (informatikaKategória:en:Informatika#PURE%20VIRTUAL%20FUNCTION) A pure virtual function a C++-ban egy olyan virtuális függvény, amelynek nincs saját implementációja az osztályban, amelyben deklarálják. Ezt azzal jelezzük, hogy a függvény deklarációjának végére írunk egy
= 0értéket.
1. Mi az a pure virtual function?
A pure virtual function olyan függvény egy bázisosztályban, amelyet az abból származtatott osztályoknak kötelező implementálniuk. Az ilyen függvények az absztrakt osztályok alapját képezik.
Szintaxis:
class Base {
public:
virtual void pureFunction() = 0; // Pure virtual function
};
Ebben az esetben a pureFunction() nem rendelkezik implementációval az Base osztályban, és a leszármazott osztályoknak kell megvalósítaniuk.
2. Az absztrakt osztályok és a pure virtual function kapcsolata
Egy osztály akkor válik absztrakt osztállyá, ha legalább egy pure virtual function-t tartalmaz. Egy absztrakt osztály nem példányosítható közvetlenül.
Példa egy absztrakt osztályra:
class Shape {
public:
virtual void draw() = 0; // Pure virtual function
};
Ebben az esetben a Shape osztály egy absztrakt osztály, és nem lehet belőle objektumot létrehozni.
3. Pure Virtual Function Implementálása a Származtatott Osztályokban
A pure virtual function-t a leszármazott osztályokban kötelező megvalósítani, különben azok is absztrakt osztályok maradnak.
Példa leszármazott osztályra:
class Circle : public Shape {
public:
void draw() override {
std::cout << "Drawing a Circle" << std::endl;
}
};
A Circle osztály implementálja a draw() függvényt, így már példányosítható.
4. Mikor Használjunk Pure Virtual Function-t?
Akkor használjunk pure virtual function-t, ha:
- Biztosítani akarjuk, hogy minden leszármazott osztály saját implementációt adjon a függvényhez. - Olyan absztrakt osztályokat hozunk létre, amelyek csak egy interfészként szolgálnak. - Polimorfizmust akarunk megvalósítani.
5. Polimorfizmus Pure Virtual Function-nel
A pure virtual function lehetővé teszi, hogy egy alaposztály pointerén vagy referenciáján keresztül a megfelelő leszármazott osztály metódusa hívódjon meg.
Példa:
void render(Shape& s) {
s.draw(); // Meghívja a megfelelő leszármazott osztály metódusát
}
int main() {
Circle c;
render(c); // "Drawing a Circle" kiírás jelenik meg
}
Ebben az esetben a render() függvény elfogad egy Shape referenciát, és dinamikus kötés révén a megfelelő draw() metódust hívja meg.
6. Pure Virtual Function Definiálása Az Osztályban
Bár a pure virtual function-nek nincs saját implementációja, mégis definiálhatunk rá egy alapértelmezett megvalósítást az osztályon belül.
Példa:
class Base {
public:
virtual void show() = 0; // Pure virtual function
};
void Base::show() {
std::cout << "Base implementation" << std::endl;
}
A leszármazott osztályoknak továbbra is meg kell valósítaniuk ezt a függvényt, de hivatkozhatnak az alapértelmezett implementációra.
7. Pure Virtual Destructor
A destruktor is lehet pure virtual, de ennek mindig kell egy implementáció az osztályon belül.
Példa:
class Base {
public:
virtual ~Base() = 0; // Pure virtual destructor
};
Base::~Base() {
std::cout << "Base destructor called" << std::endl;
}
A pure virtual destruktor akkor lehet hasznos, ha biztosítani akarjuk, hogy az osztály absztrakt maradjon, de mégis meg lehessen hívni az alaposztály destruktorát a származtatott osztályok törlésekor.
8. Több Pure Virtual Function Egy Osztályban
Egy osztályban több pure virtual function is lehet, így egy komplexebb interfészt is definiálhatunk.
Példa:
class Animal {
public:
virtual void makeSound() = 0;
virtual void move() = 0;
};
A leszármazott osztályoknak mindkét függvényt meg kell valósítaniuk.
9. Pure Virtual Function és Többszörös Öröklődés
A C++ támogatja a többszörös öröklődést, így egy osztály több absztrakt osztályból is örökölhet.
Példa:
class Flyable {
public:
virtual void fly() = 0;
};
class Swimmable {
public:
virtual void swim() = 0;
};
class Duck : public Flyable, public Swimmable {
public:
void fly() override {
std::cout << "Duck is flying" << std::endl;
}
void swim() override {
std::cout << "Duck is swimming" << std::endl;
}
};
Ebben az esetben a Duck osztály mindkét interfészt megvalósítja.
10. Összegzés
A pure virtual function egy olyan függvény egy osztályban, amelyet a leszármazott osztályoknak kötelező implementálniuk. Segít az absztrakt osztályok létrehozásában és a polimorfizmus megvalósításában.
Főbb jellemzők: - = 0 jelöli. - Egy absztrakt osztályban található. - Nem példányosítható alaposztályból. - A leszármazott osztályokban implementálni kell. - Polimorfizmust tesz lehetővé. - Destruktor is lehet pure virtual.
Használata elengedhetetlen az objektumorientált programozásban és a C++ játékfejlesztésben is, ahol gyakran alkalmazzák például a renderelő rendszerekben és komponens alapú architektúrákban.
További információk
- pure virtual function - Szótár.net (en-hu)
- pure virtual function - Sztaki (en-hu)
- pure virtual function - Merriam–Webster
- pure virtual function - Cambridge
- pure virtual function - WordNet
- pure virtual function - Яндекс (en-ru)
- pure virtual function - Google (en-hu)
- pure virtual function - Wikidata
- pure virtual function - Wikipédia (angol)Kategória:en