Запитання з тегом «abstract-class»

Абстрактний клас - це клас, який неможливо інстанціювати. Вони, як правило, мають бути розширені / підкласи і, як правило, мають "абстрактні методи", які повинні бути реалізовані підкласами.

7
Коли використовувати абстрактні класи замість інтерфейсів із методами розширення в C #?
"Абстрактний клас" та "інтерфейс" є подібними поняттями, причому інтерфейс є більш абстрактним з двох. Одним з відмінних факторів є те, що абстрактні класи забезпечують реалізацію методів для похідних класів, коли це необхідно. Однак у C # цей диференціюючий коефіцієнт був зменшений нещодавним введенням методів розширення, які дозволяють забезпечити реалізацію методів …

9
Чому я повинен оголошувати клас абстрактним класом?
Я знаю синтаксис, правила, застосовані до абстрактного класу, і хочу знати використання абстрактного класу Абстрактний клас не може бути безпосередньо встановлений, але може бути розширений іншим класом У чому перевага цього? Чим він відрізняється від інтерфейсу? Я знаю, що один клас може реалізовувати декілька інтерфейсів, але може поширювати лише один …

4
Чому в C ++ чому і як віртуальні функції повільніші?
Чи може хтось детально пояснити, як саме працює віртуальна таблиця та які покажчики пов’язані, коли викликаються віртуальні функції. Якщо вони насправді повільніші, чи можете ви показати час, який віртуальна функція потребує на виконання, більше, ніж звичайні методи класу? Легко простежити, як / що відбувається, не бачачи якогось коду.

2
Впровадження чистих абстрактних класів та інтерфейсів
Хоча це не є обов'язковим у стандарті C ++, схоже, GCC, наприклад, реалізує батьківські класи, включаючи чисто абстрактні, шляхом включення покажчика на v-таблицю для цього абстрактного класу в кожній інстанції відповідного класу. . Природно, це збільшує розмір кожного примірника цього класу вказівником для кожного батьківського класу, який він має. Але …

4
Використовуйте абстрактний клас у C # як визначення
Як розробник C ++ я досить звик до файлів заголовків C ++, і вважаю вигідним мати якусь вимушену "документацію" всередині коду. Зазвичай у мене поганий час, коли мені доводиться читати якийсь код C # через це: у мене немає такої ментальної карти класу, з якою я працюю. Припустимо, що як …

3
Ніколи не робіть публічних членів віртуальними / абстрактними - справді?
Ще в 2000-х моїй колезі сказали мені, що це зробити анти-зразком зробити публічні методи віртуальними чи абстрактними. Наприклад, він вважав такий клас, як недостатньо розроблений: public abstract class PublicAbstractOrVirtual { public abstract void Method1(string argument); public virtual void Method2(string argument) { if (argument == null) throw new ArgumentNullException(nameof(argument)); // default …

5
Чи створюють переліки крихкі інтерфейси?
Розглянемо приклад нижче. Будь-яка зміна перерахунку ColorChoice впливає на всі підкласи IWindowColor. Чи викликають перерахунки крихкі інтерфейси? Чи є щось краще, ніж ентум, щоб дозволити більше поліморфної гнучкості? enum class ColorChoice { Blue = 0, Red = 1 }; class IWindowColor { public: ColorChoice getColor() const=0; void setColor( const ColorChoice …

2
Супер тип абстрактних винятків
Якщо кидання System.Exceptionвважається настільки поганим, чому б не булоException робили abstractв першу чергу? Таким чином, не вдасться зателефонувати: throw new Exception("Error occurred."); Це призведе до використання похідних винятків, щоб надати більш детальну інформацію про помилку, що сталася. Наприклад, коли я хочу надати власну ієрархію виключень для бібліотеки, я зазвичай оголошую …

4
Коли перенести загальне поле в базовий клас?
Наразі у мене є два похідні класи, Aі в Bобох є спільне поле, і я намагаюся визначити, чи повинен він переходити до базового класу. На нього ніколи не посилається базовий клас, і скажіть, якщо в якийсь момент по дорозі виведений інший клас C, який не має _field1, тоді не було …

6
Які відмінності між абстрактними класами, інтерфейсами та коли ними користуватися
Нещодавно я почав обертати голову навколо ООП, і зараз я перебуваю до того, що чим більше я читаю про відмінності між абстрактними класами та інтерфейсами, тим я більше плутаюся. Поки що це неможливо уявити. Інтерфейси - це більш-менш структурні креслення, які визначають скелет, а реферати відрізняються тим, що можуть частково …

6
Чи можна розглядати методи інтерфейсу як абстрактні методи?
Я думав про це, і у мене були деякі сумніви. Наприклад, коли я оголошу інтерфейс, наприклад: public interface MyInterface { public void method1(); public void method2(); } Чи можна вважати ці методи інтерфейсу абстрактними? Я маю на увазі те, що поняття абстрактного методу: Абстрактний метод - це метод, який оголошується, …

3
Чи потрібно реалізовувати інтерфейс безпосередньо або дозволити суперклас це робити?
Чи є різниця між public class A extends AbstractB implements C {...} проти... public class A extends AbstractB {...} abstract class AbstractB implements C {...} Я розумію, що в обох випадках клас A в кінцевому підсумку відповідає інтерфейсу. У другому випадку AbstractBможна забезпечити реалізацію методів інтерфейсу в C. Це єдина …

5
Чому статичні методи не мають змоги бути переборними?
У відповідях на це питання загальний консенсус полягав у тому, що статичні методи не повинні бути перекритими (і, отже, статичні функції в C # не можуть бути віртуальними або абстрактними). Однак це не лише у C #; Java також забороняє це, і C ++, схоже, також не подобається. Однак я …

4
Чи існує інше обґрунтування використання абстрактних класів / інтерфейсів у C ++ та Java
За словами Герба Саттера, слід віддавати перевагу абстрактним інтерфейсам (всі чисті віртуальні функції) абстрактним класам на C ++, щоб максимально відключити реалізацію. Хоча я особисто вважаю це правило дуже корисним, останнім часом я приєднався до команди з багатьма програмістами Java, і в коді Java ця інструкція, здається, не існує. Функції …

7
Які ролі синглів, абстрактних класів та інтерфейсів?
Я вивчаю OOP в C ++ і, хоча знаю визначення цих 3 понять, я не можу реально усвідомити, коли або як ним користуватися. Давайте використаємо цей клас для прикладу: class Person{ private: string name; int age; public: Person(string p1, int p2){this->name=p1; this->age=p2;} ~Person(){} void set_name (string parameter){this->name=parameter;} void set_age (int …

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.