Because you need to initialize it to some value; otherwise when you call the constructor in some other part of your code, you'll get trash values and your program most likely won't do what you want.
Your second snippet is a very inefficient version of the first one, and isn't recommended.
If the the type of parameters is not a built in C++ type like int, char, or double say, then the second snippet creates unnamed, unrelated temporary copies of the constructor parameters, after they had already been initialised with the default value, then it initialises them again with the actual values in the constructor body.
The first snippet uses direct initialisation once, before any (if any) default initialisation. So this is the preferred option, it's efficient no matter what the types are.
@OP: that's called initialization list.
You'll also need it to initialize the base class, any constant member, or any member that doesn't have a default constructor.
Just to note, that example code is confusing, because the writer has clearly used the same name, x, for both the data member, and the constructor argument. x(x) in the initialiser list means "initialise the data member x, with the value passed in as the parameter x".
Just to note, that example code is confusing, because the writer has clearly used the same name, x, for both the data member, and the constructor argument.