Здравствуйте, Пофигист, Вы писали:
П>Здравствуйте, о_О, Вы писали:
о_О>>Воскресный вброс на хабрэ. Ничего сверх, исключительно для ознакомления
П>П>Когда я говорил, что нельзя платить тысячи долларов тем, кто не знает, чем абстрактный класс отличается от интерфейса, вы продолжали им платить. Теперь у нас все зарабатывают тысячи долларов, но х*р его знает, чем абстрактный класс отличается от интерфейса.
П>Я дико извиняюсь за свою дремучесть, но может кто разъяснит на пальцах мне, сипиписту, чем же у вас явистов и шарпистов так уж принципиально отличаются абстрактный класс от интерфейса? Понаплодили, блин, сущностей зачем-то.
я тоже пишу на С++, но знаю чем абстрактный класс отличается от интерфейса.
более того, язык тут ни при чем, это базовые понятия ОО-подхода (в Си тоже можно применять классы (абстрактные) и интерфейсы).
собственно отличие состоит в возможности владения объектом.
class IFoo
{
public:
virtual void doSomething() = 0;
protected:
~IFoo() {}
};
это интерфейс.
мы не можем владеть объектом с интерфейсом IFoo, т.е. мы не можем использовать smart_owning_ptr<IFoo> (или сделать delete fooPtr
class AFoo
{
public:
virtual void doSomething() = 0;
virtual ~AFoo() {}
};
это абстрактный класс.
мы можем владеть объектами абстрактного класса AFoo, т.е. мы можем использовать smart_owning_ptr<AFoo> (или сделать delete fooPtr
в качестве дополнительного материала можно почитать про interface (!) segregation principle, и заодно подумать о
class IDestructible { public: virtual ~IDestructible() {} };