Вопросы с тегом «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)); // …

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

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 {...} Я понимаю, что в обоих случаях класс А в конечном итоге будет соответствовать интерфейсу. Во втором случае AbstractBможет обеспечить реализацию методов интерфейса в C. Это …

5
Почему статические методы не должны быть переопределенными?
В ответах на этот вопрос общее согласие заключалось в том, что статические методы не предназначены для переопределения (и, следовательно, статические функции в C # не могут быть виртуальными или абстрактными). Это не только случай в C #, хотя; Java также запрещает это, и C ++, похоже, тоже не нравится. Однако …

4
Существует ли другое обоснование использования абстрактных классов / интерфейсов в C ++ и Java?
Согласно Хербу Саттеру, следует предпочитать абстрактные интерфейсы (все чисто виртуальные функции) абстрактным классам в C ++, чтобы максимально отделить реализацию. Хотя я лично считаю, что это правило очень полезно, я недавно присоединился к команде со многими программистами на Java, и в коде Java это руководство, по-видимому, не существует. Функции и …

7
Каковы роли синглетонов, абстрактных классов и интерфейсов?
Я изучаю ООП на C ++ и, хотя мне известны определения этих трех концепций, я не могу понять, когда и как их использовать. Давайте использовать этот класс для примера: 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.