I think that Oblomov has the right attitude. Call people out, very directly, but in an unaggressive yet unapologetic way.
The old 'forgotten my cash' ruse is classic. I guess it could be a one off, and you always want to give people the benefit of the doubt, but a pattern usually emerges pretty quickly.
I've sat there seething as a friend announced, in a pub, that they deliberately only came out with £5 so that they couldn't buy more than one drink, and then happily sit and accept drinks from other people. That's not being frugal, it's just taking the piss. If people want to be careful with their money, that's fine, but when it impinges on you, time and time again, it really grates.
I hate being taken advantage of in this way, and they know that they are putting you in a tortuous position because you value being reasonable and kind.
I think they do learn it from their parents. At least as far as I've seen.