Я читал онлайн-отрывок из C++ книги о полиморфизме и интерфейсах. Книга сделала различие между полиморфизмом и интерфейсами и указала, как их реализовать в C++. Тем не менее, мне всегда казалось, что интерфейсы в C++ (реализованные с использованием базового класса с чистыми виртуальными функциями) являются не чем иным, как применением полиморфизма. Я хотел бы знать четкое различие между полиморфизмом и интерфейсами, потому что отрывок смутил меня.
Полиморфизм представляет собой абстрактную концепцию обращения с несколькими типами в единой форме, а интерфейсы - это способ реализации этой концепции. Код, который взаимодействует с интерфейсом, может взаимодействовать с любым типом, который обеспечивает этот интерфейс.
Обратите внимание, что C++ имеет (по крайней мере) две формы полиморфизма: динамический (т.е. Время выполнения) полиморфизм через интерфейсы, формально определенные виртуальными функциями, и статический (то есть время компиляции) полиморфизм через интерфейсы, неформально определяемые использованием параметров шаблона,
То, что я понял из концепции polymorphism
и Interface
выглядит следующим образом:
Polymorphism
- это не что иное, как наличие более чем одной формы (по всем книгам). Но в соответствии с ориентацией объекта, когда вы связываете его с реальной жизнью, вы узнаете, что Polymorphism
- это не что иное, как наличие более одной формы с таким же именем или каким-либо другим качеством, но с одним собственным качеством патентов, которое никто не имеет. В соответствии с программированием: функция с тем же именем. Но разные аргументы (полиморфизм времени компиляции) и виртуальная функция, используемая для полиморфизма времени выполнения. Как объясняется здесьИнтерфейс описывает поведение или возможности класса C++, не связываясь с конкретной реализацией этого класса.
Интерфейсы C++ реализованы с использованием абстрактных классов, и эти абстрактные классы не следует путать с абстракцией данных, которая представляет собой концепцию сохранения деталей реализации отдельно от связанных данных.
Для этой цели мы используем Pure Virtual function
для справки, вы можете пройти через эту ссылку
И, например, вы можете использовать объяснение Матс Петерсон
Надеюсь, это поможет вам понять базовый сенарио.
Типичные интерфейсы C++ используют виртуальные функции и полиморфизм для обеспечения реальной реализации. Но полиморфизм охватывает многие другие вещи, которые являются "не интерфейсами".
Интерфейс - это базовый класс, который можно использовать для класса, который передается обратно к тому, что принимает этот интерфейс. В некоторых случаях класс может предоставлять более одного интерфейса:
class MyClass: public InterfaceGUI, InterfaceAudio
{
....
};
здесь MyClass
предоставляет класс, который взаимодействует как с графическим интерфейсом, так и с аудио интерфейсами. Это один случай множественного наследования.
С другой стороны:
class Animal
{
int numLegs;
public:
Animal(int nLegs): numLegs(nLegs) {}
};
class Dog : public Animal
{
Dog() : Animal(4) { }
};
здесь Animal
не является чистым интерфейсом, так как он реализует некоторые функции, и это, как правило, не очень хороший дизайн для интерфейса.