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