基类参数vs纯虚函数,用于可自定义的常量

时间:2017-04-27 16:07:08

标签: c++

假设我有一些基类,并且该类的所有实例都有一些常量属性(对于类是私有的)。该属性的值由派生类确定。对于每个派生类,它可以是内在的或依赖于构造函数参数。

最好将此可自定义属性表示为基类构造函数的参数,还是纯虚方法?是否有理由更喜欢一个而不是另一个?

我想到的两个选项的具体图片:

// Option with the constructor param. Call it a bool for simplicity.
class BaseClass {
  public:
    BaseClass(bool property) : property_(property) {}
    ...
  private:
    GetProperty() { return property_; }

    const bool property_;
}
class DerivedClassOne : public BaseClass {
  public:
    DerivedClassOne() : BaseClass(false) {}
}
class DerivedClassTwo : public BaseClass {
  public:
    DerivedClassTwo(int some_param) : BaseClass(some_param > 0) {}
}

对战:

// Option with the pure virtual method.
class BaseClass {
  private:
    virtual GetProperty() = 0;
}
class DerivedClassOne : public BaseClass {
  private:
    GetProperty() override { return false; }
}
class DerivedClassTwo : public BaseClass {
  public:
    DerivedClassTwo(int some_param) : some_param_(some_param) {}
  private:
    GetProperty() override { return some_param > 0; }

    const int some_param_;
}

我只是在这里分裂头发吗?

1 个答案:

答案 0 :(得分:1)

我稍微喜欢第一种方法。

虚拟函数调用可能无法优化 - 至少不会通过指向类的指针调用。常量可以直接使用,即使你使用get函数,它的调用也可能由编译器优化。

此外,虚拟功能版本中还有更多代码需要读取。

相关问题