【发布时间】:2019-10-01 09:19:44
【问题描述】:
我知道我可以像这样在派生中初始化基类的向量:
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}})
{
}
但是有没有办法在child中初始化这个基类的向量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. minimal reproducible example 应该包含尽可能多的文件来证明这一点,而不是更多。
-
你期望
Derived::Derived() : Base(vec_({{0, 0}, {1, 1}})) {}- 如果它是有效的,它不是 - 实现Derived::Derived() : Base({{0, 0}, {1, 1}}) {}没有实现?您的目标似乎是初始化Base的vec_成员 - 但基类构造函数会这样做。请记住,构造基类会初始化具有适当构造函数的基类的所有成员 - 因此选择正确的构造函数是根据需要初始化成员的方法。 -
我只想在每个派生类中用不同的值初始化向量。
标签: c++ inheritance constructor initialization access-control