Использование структуры в конструкторе

#c #struct #constructor

#c #структура #конструктор

Вопрос:

Могу ли я с помощью конструктора задавать значения переменным, расположенным в частных классах, используя информацию, которая будет храниться в векторе структуры? Это создаст значения для класса, одним из которых является строковое имя месяца -MonthName — используя числовое место месяца в качестве ориентира для места в векторе структуры.

 //m/d/y;year_is_private_variable
Date(unsigned m, unsigned d, unsigned y){
         year=y;
         for(unsigned i=0;i<12;  i){
             if(m==yVector.mPlace.at(i)){
                 monthName=yVector.mName.at(i);

             }
         }
  

Комментарии:

1. Трудно понять, что вы имеете в виду, но может быть, вы просто хотели m==yVector.at(i).mPlace monthName=yVector.at(i).mName; вместо этого сделать and ?

Ответ №1:

Вы можете использовать значения, сохраненные внутренними частями класса / структуры, для инициализации других переменных класса / структуры во время построения. Но вы должны иметь в виду, что переменные, которые вы хотите использовать, должны быть инициализированы перед использованием. Для целей вашего примера вы можете использовать статическое поле const для хранения всех месяцев. Упрощенный код ниже

 #include <iostream>
#include <string>
#include <vector>

struct Date
{
    Date(int month)
        : month_name(values[month])
    {

    }

    std::string month_name;

private:

    static const std::vector<std::string> values;
};

const std::vector<std::string> Date::values = {"may", "april"};

int main()
{
    Date d = Date(1);

    std::cout << d.month_name;

    return 0;
}