用向量进行C ++类初始化

时间:2018-06-12 03:33:37

标签: c++ constructor initialization

我继承了一些我正在寻求扩展的代码,但是我遇到了一个我之前从未见过的类\构造函数。在下面的代码片段中显示

class A {
 public:
    A() {};
    ~A() {};
 //protected:
    int value_;

class B: public std::vector<A> {
  public:
    B(int size = 0) :
      std::vector<A>(size)
    {}

因此,我收集的class Bclass A的向量,可以使用*this语法访问该向量,因为没有变量名称。我想在构造函数中启动class A,但我不确定如何在此上下文中执行此操作。我查看了this但是他们已经将向量声明为一个对象,在这种情况下它是类。

这与普通继承略有不同,正常继承我继承了单个类的许多实例,而在大多数教科书中通常都是一对一的。我试图做的是通过class Aclass B构造函数将值传播到初始化class A。下面的内容就是我尝试但不编译的内容。

#include <iostream>
#include <vector>
using namespace std;
class A {
 public:
    A(int int_value) :
    value_(int_value)
    {};
    ~A() {};
 //protected:
    int value_;
};

class B: public vector<A> {
  public:
    B(int size = 0, int a_value) :
      vector<A>(size, A(a_value))
    {};

    vector<int> new_value_;

    void do_something() {
        for (auto& element : *this)
            new_value_.push_back(element.value_);
    }
};

int main() {
    cout << fixed;
    cout << "!!!Begin!!!" << endl;
    B b(20,23);
    cout << b.size() << endl;

    b.do_something();
    for(auto& element : b.new_value_)
        cout << element << endl;

    cout << "finished" << endl;
    system("PAUSE");
    return 0;
}

我想后续问题是,这是对此代码试图实现的内容的良好实现

1 个答案:

答案 0 :(得分:2)

B(int size = 0, int a_value) ... 

不正确。您可能没有带有默认值的参数,后跟没有默认值的参数。

可能的决议:

  1. 为两个参数提供默认值。

    B(int size = 0, int a_value = 0) ... 
    
  2. 仅为第二个参数提供默认值。

    B(int size, int a_value = 0) ... 
    
  3. 更改,以便两者都没有默认值。

    B(int size, int a_value) ...