假设我有一些基类,并且该类的所有实例都有一些常量属性(对于类是私有的)。该属性的值由派生类确定。对于每个派生类,它可以是内在的或依赖于构造函数参数。
最好将此可自定义属性表示为基类构造函数的参数,还是纯虚方法?是否有理由更喜欢一个而不是另一个?
我想到的两个选项的具体图片:
// 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_;
}
我只是在这里分裂头发吗?
答案 0 :(得分:1)
我稍微喜欢第一种方法。
虚拟函数调用可能无法优化 - 至少不会通过指向类的指针调用。常量可以直接使用,即使你使用get函数,它的调用也可能由编译器优化。
此外,虚拟功能版本中还有更多代码需要读取。