繁体   English   中英

使用基类方法初始化派生类成员

[英]Using base class methods to initialize derived class members

这合法吗? 如果是这样,你认为它是一个好的编码实践吗?

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

class ItemStorage {
    int size() const;
};

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

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

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

即使大小是虚拟的,即使它被覆盖,它仍然会很好:它只会调用基本版本(即虚拟方法只绑定到正在构建的级别)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM