如何在派生构造函数中初始化从基类继承的向量

时间:2019-05-14 10:57:27

标签: c++ inheritance constructor initialization access-control

我知道我可以像这样在派生类中初始化基类的向量:

Base.h

#include <vector>
#include <utility>

public:
  Base(std::vector<std::pair<int, int> > vec);
  ~Base();
private:
  std::vector<std::pair<int, int> > vec_;

Base.cpp

Base::Base(std::vector<std::pair<int, int> > vec) : vec_(vec)
{
}

Derived.cpp

Dervied::Derived : Base({{0, 0}, {1, 1}})
{
}

但是还有一种方法可以在孩子中初始化该基类的向量vec_吗?

Base.h

#include <vector>
#include <utility>

public:
  Base();
  ~Base();
private:
  std::vector<std::pair<int, int> > vec_;

Base.cpp

Base::Base()
{
}

类似这样:

Derived::Derived : Base(vec_({{0, 0}, {1, 1}}))

或者这在C ++中根本不可能吗?

1 个答案:

答案 0 :(得分:2)

vec_private。因此,在派生类中无法访问它。如果需要在派生类中访问它,可以将其设置为protected

就目前的类而言,您只能通过基类构造函数修改vec_

如果派生类还可以使用其他一些基类方法修改了vec_,则可以使用它们来更改vec_