dukevin
dukevin

Reputation: 23208

C++ initialization lists for multiple variables

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

Upvotes: 15

Views: 15673

Answers (4)

Anne Quinn
Anne Quinn

Reputation: 13040

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

Upvotes: 5

Armen Tsirunyan
Armen Tsirunyan

Reputation: 133122

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

Upvotes: 5

Fred Larson
Fred Larson

Reputation: 62123

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

Upvotes: 1

Andy Thomas
Andy Thomas

Reputation: 86509

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.

Upvotes: 20

Related Questions