This is required because the constructor tries to contruct every member of the class in RAM as it is constructed.When you write something inside the { }, the object is already initialized in memory.

This causes a problem when trying to construct an object that needs some parameters passed as arguments to the constructor.It will complain that there is no constructor available with no parameters. (As I said, it tries to construct the software serial object at ... well ... construction.)

In C++ you need to have a way of passing arguments to member variables as they are constructed. Not afterwards. The : is just the syntax on how to accomplish that.