C++ initialization lists for multiple variables

11,595

Solution 1

Try this:

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

[You can do this as a single line. I've split it merely for presentation.]

The empty braces {} are the single body of the constructor, which in this case is empty.

Solution 2

Month(char first, char second, char third) 
      : first(first)
      , second(second)
      , third(third)
{} //DOES WORK :)

Solution 3

As others have pointed out, it's just a comma seperated list of items. The variable(value) syntax is just a default way of constructing primative datatypes, you can use this method outside of initialization lists for example. In addition, if a member of your class is also a class with a constructor, you'd call it in the exact same way.

You are not only bound to putting the list in the declaration of the class, just for future reference. This code is perfectly fine for example

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
};

Solution 4

Initializers are comma-separated, and your constructor should have only one body.

Share:
11,595
dukevin
Author by

dukevin

.-"-.__ | .' / ,-| ```'-, || . ` / /@)|_ `-, | / ( ~ \_```""--.,_', : _.' \ /```''''""`^ / | / `| : / \/ | | . / __/ | |. | | __/ / | | | "-._ | _/ _/=_// || : '. `~~`~^| /=/-_/_/`~~`~~~`~~`~^~`. `> ' . \ ~/_/_ /" ` . ` ' . | .' ,'~^~`^| |~^`^~~`~~~^~~~^~`; ' .-' | | | \ ` : ` | :| | : | |: | || ' | |/ | | : |_/ | . '

Updated on June 05, 2022

Comments

  • dukevin
    dukevin almost 2 years

    I'm trying to learn how to initialize lists.

    I have a simple class below and trying to initialize the list of variables. The first Month(int m): month(m) works. I'm trying to do something similar below that line with more than one variable. Is this possible in that format? would I have to break away from the one liner?

    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;
    };
    

    Obviously I don't have much clue how to do this, any guidance would be appreciated, thanks