抽象基类(接口类)通常具有所有成员函数都是抽象的。但是,我有几种情况下使用了由接口的抽象方法调用组成的成员函数。我可以在派生但仍然是抽象的类中实现它们,也可以将这些方法实现为接口类的非抽象、非虚拟方法。
在接口类中实现方法是否存在设计问题?如果存在,那么它是否是不好的风格,为什么?
静态方法是否也适用于此?
例如:
class IFoo
{
public:
virtual ~IFoo();
virtual double calcThis( InputType p ) const = 0;
virtual double calcThat( InputType p ) const = 0;
double calcFraction( InputType p ) { return calcThis( p ) / calcThat( p ); }
static BarType bar( InputType p );
};
class MyFoo : public IFoo
{
public:
// implements IFoo
virtual double calcThis( InputType p ) const;
// implements IFoo
virtual double calcThat( InputType p ) const;
};
对比
class IFoo
{
public:
virtual ~IFoo();
virtual double calcThis( InputType p ) const = 0;
virtual double calcThat( InputType p ) const = 0;
};
class FooBase : public IFoo
{
public:
virtual ~FooBase();
double calcFraction( InputType p ) { return calcThis( p ) / calcThat( p ); }
static BarType bar( InputType p );
};
class MyFoo : public FooBase
{
public:
// implements IFoo
virtual double calcThis( InputType p ) const;
// implements IFoo
virtual double calcThat( InputType p ) const;
};