public
or private
)
can be const
. This may seen strange, because apparently there
is no way to initialize such data members. Let us consider the following
example:
class X { const int i; public: X(void); }; X::X(void) { i = 2; }
The above code generates an error because i
is a const
data
member, it cannot be altered! So, what good does a const
data
member do when its initial value cannot be set?
As it turns out, a const
data member can get its initial value
from a special mechanism to initialize data members. The following code
illustrates this:
X::X(void):i(23) { }
This code does not generate any error message. This is because
i(23)
is considered the initialization of i
while
i
is being defined. It is kind of like const int i = 23
.
Also, note that the initializer of i
can use any parameter of
the constructor itself. Observe the following example:
class X { const int i; public: X(int x, int y); }; X::X(int x, int y):i(x+y) { }