У меня есть абстрактный базовый класс с виртуальным методом. В производном классе этот метод реализован. Тем не менее, я хочу, чтобы функция в производном классе была статическим методом, чтобы иметь возможность вызывать функцию без создания экземпляра объекта этого класса.реализовать виртуальный метод из базового класса как полученный в статическом
class Base
{
virtual double Foo(double rParam) const;
};
class Derived1 : public Base
{
static double Foo(double rParam);
};
class Derived2 : public Base
{
static double Foo(double rParam);
};
По существу, Derived1 и Derived2 обеспечивают различные реализации статической функции (которые не зависят от данных объекта), но я хочу, чтобы эти функции, чтобы быть виртуальными, с тем, чтобы иметь возможность вызывать эти функции в других функциях базовый класс. Единственное решение, которое я вижу сейчас, это реализовать две функции-члены в производном классе, одна из которых является виртуальной функцией из базового класса, а другая (с другим именем) является статической функцией. Чтобы не допустить дублирования исходного кода, виртуальная функция могла тогда напрямую вызвать статическую функцию (может быть встроена). Любые другие решения?
class Derived : public Base
{
double Foo(double rParam)const
{
return FooStatic(rParam);
}
inline static double FooStatic(double rParam);
};
Если 'Foo' помечен как' virtual', это означает, что он зависит от типа среды выполнения объекта, поэтому он не может быть связан с экземпляром класса. –
Ситуация немного сложнее. В качестве упрощенного примера предположим, что у нас есть базовый класс, для которого требуется функция foo. В Derived1 это линейная функция, поэтому foo (x) = x и в Derived2 foo (x) = x^2, поэтому обе функции не зависят от данных объекта. Однако я хочу, чтобы функция была виртуальной в базовом классе, чтобы иметь возможность вызывать эту функцию из другой функции в базовом классе. В производном классе есть и другие члены данных, однако это не важно для текущего примера со статическими/виртуальными методами. – Ferdi