Здравствуйте, Аноним, Вы писали:
А>Не пойму почему так, ведь по сути один и тот же класс.
Так ты же его извне вызываешь.
А>А что делать если надо?
friend'ом сделать derived_A можно для base. Поможет. Но не нужно.
А>>Не пойму почему так, ведь по сути один и тот же класс. 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();
}
};
Здравствуйте, Аноним, Вы писали:
А>Не пойму почему так, ведь по сути один и тот же класс.
Нет, классы разные.
А>А что делать если надо?
Устранять ошибку проектирования.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!