А>>Не пойму почему так, ведь по сути один и тот же класс.
N>Так ты же его извне вызываешь.
Я почему то всегда думал что для одного и того же типа правила видимости рояля не играют.
Оказывается что уже в унаследованных классах это правила не работают.
Ведь так всё ок получается:
class base
{
private:
base* parent;
public:
base* get_parent() { return parent; }
Вот так работает это понятно....
void test( base* p ) {
p->test_protected();
}
protected:
void test_protected() {};
};
class derived_A : public base
{
public:
void test() {
test_protected();
// можно такой хак сделать, но тоже не красиво
dynamic_cast<derived_A*>(get_parent())->test_protected();
}
};