It is technically possible to achieve the effect by overloading, but that limits the ability to use default arguments.
Code:
void fun(int, int, int, int = 40)
{
// whatever
}
void fun(int a, int b)
{
fun(a, 20, b);
}
void fun(int a = 10)
{
fun(a, 20, 30, 40);
}
This isn't a particularly good idea; at the least it will make it VERY easy for a user of these functions to make an error, and get the arguments in a wrong order. So there would be a maintenance nightmare associated with the any function that calls fun().
IMHO, any coder who uses this sort of technique in production code that someone else has to reuse should be summarily shot.