Инициализация класса C ++ с вектором - PullRequest
0 голосов
/ 12 июня 2018

Я унаследовал некоторый код, который я смотрю на расширение, но я натолкнулся на класс \ конструктор, которого я раньше не видел.Ниже показано во фрагменте кода

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

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

Итак, из того, что я понял, class B - это вектор class A, к которому можно получить доступ с использованием синтаксиса *this, поскольку имя переменной отсутствует.Я хотел бы инициировать class A в конструкторе, но я не уверен, как это сделать в этом контексте.Я посмотрел на this , но они объявили вектор как объект, где в данном случае это класс.

Кажется, это немного отличается от обычного наследования, где я унаследовал много экземпляроводин класс, по сравнению с обычным один в один в большинстве учебников.То, что я пытался сделать, это распространить значение, чтобы инициализировать class A через конструктор class 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 голосов
/ 12 июня 2018
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) ... 
    
...