Głupia sprawa, na przykład:
TEdit, TLabel i TMemo dziedziczą po TControl
każdemu z osobna można zmienić Color:
Edit1->Color = clRed;
Label1->Color = clRed;
Memo1->Color = clRed;
jeśli dostanę wskaźnik do czegoś co jest editem, labelem albo memo, to mogę rzutować:
dynamic_cast<TEdit*>(Object) -> Color = clRed;
dynamic_cast<Label1*>(Object) -> Color = clRed;
dynamic_cast<Memo1*>(Object) -> Color = clRed;
ale nie mogę zrobić tak:
dynamic_cast<TControl*>(Object) -> Color = clRed;
mimo, że TControl ma pole Color już, tyle że nie upublicznione. To ja się pytam: gdzie są zalety dziedziczenia po TControl w ogóle? Jak wykorzystać dziedziczenie ze wspólnego przodka w VCL, bo nie chcę w funkcji ZmienKolorKontrolki(TControl* kontrolka) wsadzać 40-tu rzutowań po kolei i liczyć, że któreś wejdzie :|
Już nie mówiąc o tym, że taka funkcja by nie mogła pracować na komponencie jakimś nowym, który dziedziczy np po TCustomEdit a nie Edit (bo rzutowanie na TCustomEdit też mi g**no daje - on też ma Color ukryty, muszę na TEdit próbować). Co za debil projektował kontrolę dostępu w VCL?!