The first gives you a lower advertised price but then irks customers when they find out about the extra charge. The second gives you a higher advertised price, which could be worse depending on the nature of the business.
But the proposed alternative where you charge the same to everybody and incorporate it into the advertised price requires you to use the higher advertised price, which has no advantage over the second option regardless of whether or not the second option is better than the first.
In other words your point is pretty much moot because nobody is choosing a restaurant based on, veal parmigiana costs $25 at Villa Roma and $24.50 at Sicily Palace. But they very much might remember that Sicily Palace charges a credit card fee and boycott it in favor of somewhere else.