C ++ списки инициализации для нескольких переменных - PullRequest
7 голосов
/ 30 сентября 2011

Я пытаюсь узнать, как инициализировать списки.

У меня есть простой класс ниже, и я пытаюсь инициализировать список переменных. Первый Month(int m): month(m) работает. Я пытаюсь сделать нечто подобное ниже этой строки с более чем одной переменной. Возможно ли это в этом формате? я должен был бы оторваться от одного лайнера?

class Month
{
public:
    Month(int m) : month(m) {} //this works
    Month(char first, char second, char third) : first(first){} : second(second){} : third(third){} //DOES NOT WORK
    Month();
    void outputMonthNumber(); //void function that takes no parameters
    void outputMonthLetters(); //void function that takes no parameters
private:
    int month;
    char first;
    char second;
    char third;
};

Очевидно, я не имею ни малейшего понятия, как это сделать, любое руководство будет оценено, спасибо

Ответы [ 4 ]

10 голосов
/ 30 сентября 2011

Попробуйте это:

  Month(char first, char second, char third) 
     : first(first), second(second), third(third) {} 

[Вы можете сделать это одной строкой. Я разделил это просто для презентации.]

Пустые фигурные скобки {} - это одно тело конструктора, которое в данном случае пусто.

5 голосов
/ 30 сентября 2011
Month(char first, char second, char third) 
      : first(first)
      , second(second)
      , third(third)
{} //DOES WORK :)
3 голосов
/ 30 сентября 2011

Как уже отмечали другие, это просто список элементов, разделенных запятыми. Синтаксис variable(value) - это просто способ создания основных типов данных по умолчанию, например, вы можете использовать этот метод вне списков инициализации. Кроме того, если член вашего класса также является классом с конструктором, вы бы назвали его точно таким же образом.

Вы обязаны не только поместить этот список в объявление класса, но и на будущее. Этот код отлично подходит, например,

class Calender{
    public:
         Calender(int month, int day, int year);
    private:
         int currentYear;
         Time time;
};

Calender::Calender(int month, int day, int year) : currentYear(year), time(month, day) {
    // do constructor stuff, or leave empty
};
1 голос
/ 30 сентября 2011

Инициализаторы разделяются запятыми, и ваш конструктор должен иметь только одно тело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...