в чем преимущество класса c ++, имеющего статические методы с точно такой же сигнатурой, что и методы интерфейса - PullRequest
1 голос
/ 12 июля 2011

В чем преимущество определения статических методов с точно такой же сигнатурой, что и у метода интерфейса в классе, который его реализует.

class IInterface
{
public:
  virtual void fn()=0;
}

class Impl :IInterface
{
public:
  ~Impl();
  static  void fn();
}

Impl::~Impl{
}

Impl::fn(){
 //do something
}

Ответы [ 2 ]

0 голосов
/ 12 июля 2011

Преимущества нет.

Ваш производный класс Impl по-прежнему является Абстрактным классом , поскольку не делает и не может переопределить чистыйвиртуальная функция.Вы не можете создавать его объекты.

Статическая функция не может переопределить виртуальную функцию из базового класса, поскольку динамический полиморфизм использует this для оценки вызова функции во время выполнения, в то время как статические функции не пропускают this указатель, потому что они не являются специфическими для любого объекта.

0 голосов
/ 12 июля 2011

Нет такого преимущества в использовании static метода.static методы не переопределяют virtual методы (которые всегда не являются static).

На самом деле имеет недостаток , что вы не можете реализовать фактическое метод для переопределения базового метода.Потому что нельзя иметь одну и ту же сигнатуру метода в одном class (один static, а другой - не static).

class Impl :IInterface
{
public :
~Impl();
staic void fn();
void fn() {} // error: invalid (can't have same signature)
};
...