Сегодня один индивидуум рассказал мне об одной фундаментальной проблеме ООП и я нифига не понял.
Есть такой пример: http://stackoverflow.com/questions/2921397/what-is-the-fragile-base-class-pro... Здесь имеется в виду, что при вызове Sub::m() x увеличится на единицу дважды? Но чем это отличается от любого другого языка? (я опущу разделение на h и cpp)
namespace Base {
int x;
void m() { x++; }
void n() { x++; m(); }
}
#include "base.h"
namespace Sub {
void m() { Base::n(); }
}
upd: простой тест показал, что проблема не в инкрементах (а ведь я хотел написать про рекурсию, но комметарий defect меня смутил, да и я подумал, что джава не настолько хренова, чтобы вызывать неабстрактные методы вот так вот).
Впрочем даже в этом случае, что мешает в любом языке так запортачить с поздним связыванием и рекурсией?