Здравствуйте.
Читал недавно Бертрана Мейера, наткнулся у него на примерно следующее:
А а
B b
f(a)
f(b)
Такой код плох, потому что нарушает принцип "честности". Читателю сложно понять какая именно f вызывается.
С другой стороны, такой код хорош
[c]
А а
B b
a.m()
b.m()
[c]
До меня не доходит — в чем тут принципиальная разница? Фактически, методы с одинаковыми именами в разных классах (имхо) эквивалентны функциям, перегруженным по одному аргументу. И читатель программы сталкивается с теми же проблемами, что и в случае простых перегруженных функций. А если учесть, что методы могут быть виртуальными, определить, что именно вызывается на самом деле — еще большая проблема.
Или я не прав?
... << RSDN@Home 1.2.0 alpha 3 rev. 880>>