假设我们有一个封装了一个向量的类,如下所示:
class VectorContainer
{
public:
VectorContainer()
: mVector()
protected:
std::vector<int> mVector;
};
假设我们有一个继承结构,使得上面给出的唯一合理的构造函数 - 不能再添加。
假设我们需要VectorContainer
的专用子类,其中mVector
表示具有预定的,恒定的行/列计数的网格。我们是否可以制作类似于DerivedContainer(size_t numRows, size_t numColumns)
的构造函数,同时将mVector
初始化为适当的大小?
答案 0 :(得分:2)
如果不更改VectorContainer
的构造函数,则无法实现目标。这是因为这个基础构造函数将始终由DerivedContainer
的构造函数调用,因为这是唯一存在的ctor。这也是明智的封装行为 - mVector
是VectorContainer
的成员,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是一维数组。