【发布时间】:2013-09-02 02:32:28
【问题描述】:
我有一个带有虚拟方法的抽象基类。在派生类中,实现了这个方法。但是,我希望派生类中的函数作为静态方法,以便能够在不实例化该类的对象的情况下调用该函数。
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,所以这两个函数都不依赖于对象数据。但是,我希望该函数在基类中是虚拟的,以便能够从基类中的另一个函数调用此函数。派生类中还有其他数据成员,但是,这对于当前使用静态/虚拟方法的示例并不重要。
标签: c++ inheritance static-methods virtual-functions