具有专门初始化的继承成员变量

时间:2014-09-25 05:16:07

标签: c++ inheritance c++11

假设我们有一个封装了一个向量的类,如下所示:

class VectorContainer
{
    public:
        VectorContainer()
            : mVector()
    protected:
        std::vector<int> mVector;
};

假设我们有一个继承结构,使得上面给出的唯一合理的构造函数 - 不能再添加。

假设我们需要VectorContainer的专用子类,其中mVector表示具有预定的,恒定的行/列计数的网格。我们是否可以制作类似于DerivedContainer(size_t numRows, size_t numColumns)的构造函数,同时将mVector初始化为适当的大小?

2 个答案:

答案 0 :(得分:2)

如果不更改VectorContainer的构造函数,则无法实现目标。这是因为这个基础构造函数将始终由DerivedContainer的构造函数调用,因为这是唯一存在的ctor。这也是明智的封装行为 - mVectorVectorContainer的成员,VectorContainer负责正确构建它。 DerivedContainer的构造函数总是可以根据需要调整它的大小。

答案 1 :(得分:1)

您的成员变量mVector是私有的,因此VectorContainer之外的任何内容都无法访问它。由于无法扩展VectorContainer类,因此无用。


对于protected,您可以在派生类中创建构造函数:

class DerivedContainer : VectorContainer
{
    public:
        DerivedContainer(size_t numRows, size_t numColumns) : VectorContainer()
        {
            mVector.assign( numRows );
        }
};

我不确定为什么要将两个变量传递给构造函数,但std :: vector是一维数组。

相关问题