In C#, C++ and Java, when you create a constructor taking parameters, the default parameterless one goes away. I have always just accepted this fact, but now I've started wondering why.
What is the reason for this behavior? Is it just a "safety measure/guess" saying "If you've created a constructor of your own, you probably don't want this implicit one hanging around"?
Or does it have a technical reason that makes it impossible for the compiler to add one once you have created a constructor yourself?
There's no reason that the compiler couldn't add the constructor if you've added your own - the compiler could do pretty much whatever it wants! However, you have to look at what makes most sense:
So, in each case, you can see that the behaviour of current compilers makes the most sense in terms of preserving the likely intent of the code.