合法吗如果是这样,您是否认为它是良好的编码习惯?

我想做这样的事情(不必要的细节没有显示):

class ItemStorage {
    int size() const;
};

class SpecialStorage : public ItemStorage  {
public:
    SpecialStorage (...) : ItemStorage(...), items(ItemStorage::size()) {...}
private:
    int items;
};

我很确定如果 size 方法不是虚拟的,那可以。如果它是虚拟的并且派生类没有覆盖它怎么办?

最佳答案

一般规则是,在初始化期间,您不得访问对象的未初始化部分。由于在初始化项目时已经对ItemStorage进行了初始化,因此调用大小确实很好。

即使size是虚拟的,即使被覆盖,也还是可以的:它将仅调用基本版本(即虚拟方法仅绑定(bind)到正在构建的级别)。

10-07 12:43