【问题标题】:c++ pass constructor parameter from parent object to child object on creationc++ 在创建时将构造函数参数从父对象传递给子对象
【发布时间】:2015-04-26 22:03:28
【问题描述】:

这个问题太具体了,我很难找到答案...

有没有办法将父类的构造函数参数自动传递给子类/结构的构造函数?

我想从数据文件中读取行以在创建时填充我的类及其子类,因此我也想将数据文件传递给子类

我的数据结构是这样的:

vector of class Par(ifstream parameter)
   membervar
   membervar
   vector of struct Chld(the same ifstream parameter)
       membervar
       vector membervar

我希望能够通过调用父级的创建并为其提供数据文件以从中读取信息来构造和填充所有子级和成员

vector<Par> parents(num, Par(datafile));

这将是我理想的创建路线,快速简单,并且我可以立即关闭数据文件,因为我拥有所需的所有信息

这甚至可能吗?不会在孩子中调用默认构造函数吗?本来希望以后不用再回去补所有的空成员,但如果非要,估计也没办法了

【问题讨论】:

  • 如果我理解正确你在做什么,为什么不手动调用所有的构造函数?
  • 短语“父类”和“子类”通常指的是继承。您似乎以非标准的方式使用它们,这会误导很多人。
  • 嗯,你可能是对的,我不知道

标签: c++ class struct constructor


【解决方案1】:

只是通过它?

class Par {
    std::vector<Chld> children;

public:
    Par(std::ifstream& file)
    { 
        children.push_back(Chld(file));  // pre-C++11
        children.emplace_back(file);     // post-C++11
    }
};

【讨论】:

  • 所以我必须使用 push_back?它不会像在初始化 {1、2、3、4 等}这样的数组时那样创建列表时读取数据}
  • @Kavukamari 我不知道你在问什么。
  • 是否不可能初始化向量;使用文件中的数据,如 vector vec(NUMBEROFITEMS,(一些类似 cin 的函数,每次都会处理流并抓取双精度值))
  • @Kavukamari 你可以用一对迭代器来构造它:vector&lt;double&gt; vec(std::istream_iterator&lt;double&gt;{input}, std::istream_iterator&lt;double&gt;{});
猜你喜欢
  • 2012-07-09
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
  • 2011-05-22
  • 2014-06-04
  • 2013-12-12
  • 2011-11-28
相关资源
最近更新 更多