Фінальний клас — це ідіома проектування, яка полягає в ідеї, що від класу, який ми у цьому випадку робимо "фінальним", не можна .
Значення
- Частково симулює final функція класу.
- Частково або повністю запобігти успадковування від класу.
Також відомий, як
- Sealed Class
Мотивація
Можлива ситуація, коли розробники захочуть обмежити наслідування чи розширення функціональності класу користувачем. У різних мовах програмування ця функціональність забезпучується. Наприклад у Java ключове слово - final, тоді коли у C# це - sealed. Ідіома Final Class реалізує цю можливість у С++.
Solution та приклад коду
Final class ідіома робить використання віртуального наслідування і дружнього класу, щоб продекламувати ефект фінального класу. Ідіома залежить від одного з правил С++: конструктор (та деструктор) унаслідуваного класу визиваються безпосередньо нащадком. Якщо доступ до конструктора чи деструктора запобігається, то клас не може мати нащадків.
class MakeFinal { MakeFinal() {} // private by default. friend class sealed; }; class sealed : virtual MakeFinal { }; class test : public sealed { }; int main (void) { test t; // Compilation error here. }
У наведеному прикладі клас test наслідується від sealed-класу, а main функція намагається створити екземпляр класу test. Створення провалюється, оскільки клас test не може отримати доступ до приватного деструктора класу MakeFinal тому що він визначений як private та є предком test.
Зауважте, що ця помилка виникає лише тоді, коли клас test є нащадком від MakeFinal. Компілятор не буде скаржитися доки клас test виконується, не наслідуючи sealed-клас.
Примітки
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Finalnij klas ce idioma proektuvannya yaka polyagaye v ideyi sho vid klasu yakij mi u comu vipadku robimo finalnim ne mozhna Znachennya Chastkovo simulyuye final funkciya klasu Chastkovo abo povnistyu zapobigti uspadkovuvannya vid klasu Takozh vidomij yak Sealed Class Motivaciya Mozhliva situaciya koli rozrobniki zahochut obmezhiti nasliduvannya chi rozshirennya funkcionalnosti klasu koristuvachem U riznih movah programuvannya cya funkcionalnist zabezpuchuyetsya Napriklad u Java klyuchove slovo final todi koli u C ce sealed Idioma Final Class realizuye cyu mozhlivist u S Solution ta priklad kodu Final class idioma robit vikoristannya virtualnogo nasliduvannya i druzhnogo klasu shob prodeklamuvati efekt finalnogo klasu Idioma zalezhit vid odnogo z pravil S konstruktor ta destruktor unasliduvanogo klasu vizivayutsya bezposeredno nashadkom Yaksho dostup do konstruktora chi destruktora zapobigayetsya to klas ne mozhe mati nashadkiv class MakeFinal MakeFinal private by default friend class sealed class sealed virtual MakeFinal class test public sealed int main void test t Compilation error here U navedenomu prikladi klas test nasliduyetsya vid sealed klasu a main funkciya namagayetsya stvoriti ekzemplyar klasu test Stvorennya provalyuyetsya oskilki klas test ne mozhe otrimati dostup do privatnogo destruktora klasu MakeFinal tomu sho vin viznachenij yak private ta ye predkom test Zauvazhte sho cya pomilka vinikaye lishe todi koli klas test ye nashadkom vid MakeFinal Kompilyator ne bude skarzhitisya doki klas test vikonuyetsya ne nasliduyuchi sealed klas Primitki