gpt4 book ai didi

c++ - 可自定义常量的基类参数与纯虚函数

转载 作者:行者123 更新时间:2023-11-28 05:10:19 29 4
gpt4 key购买 nike

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

将这个可自定义的属性表示为基类构造函数的参数,还是表示为纯虚方法更可取?是否有充分的理由偏爱其中一个?

关于我正在考虑的两个选项的具体图片:

// 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_;
}

我在这里只是吹毛求疵吗?

最佳答案

我更喜欢第一种方法。

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

另外,虚函数版本的代码也多了一些。

关于c++ - 可自定义常量的基类参数与纯虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43662800/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com