Как инициализировать вектор, унаследованный от базового класса в производном конструкторе - PullRequest
3 голосов
/ 14 мая 2019

Я знаю, что могу инициализировать вектор базового класса в производном, как это:

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 Ответ

2 голосов
/ 14 мая 2019

vec_ - это private. Следовательно, он не доступен в производном классе. Вы можете сделать это protected, если вам нужен доступ к нему в производном классе.

Поскольку ваши классы стоят на данный момент, вы можете изменить vec_ только через конструктор базового класса.

Если для производного класса были доступны другие методы базового класса, которые изменили vec_, то вы могли бы использовать их для изменения vec_.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...