Course Curriculum

Initialization of data members

Initialization of data members

In C++, class variables are initialized in the same order as they appear in the class declaration.

Consider the below code.

#include<iostream>

using namespace std;

class Test {
private:
int y;
int x;
public:
Test() : x(21), y(x + 21) {}
void print();
};

void Test::print()
{
cout<<"x = "<<x<<" y = "<<y;
}

int main()
{
Test t;
t.print();
getchar();
return 0;
}
The program prints correct value of x, but some garbage value for y, because y is initialized before x as it appears before in the class declaration.

So one of the following two versions can be used to avoid the problem in above code.

// First: Change the order of declaration.
class Test {
private:
int x;
int y;
public:
Test() : x(21), y(x + 21) {}
void print();
};

// Second: Change the order of initialization.
class Test {
private:
int y;
int x;
public:
Test() : x(y-21), y(30) {}
void print();
};

When is copy constructor called? (Prev Lesson)
(Next Lesson) When do we use Initializer List in C++?