книге написано, неявного восходящего преобразования не существует для приватного наследования. Но при написании кода
class Base
{
};
class Derived : private Base
{
public:
Derived() : Base() {}
void temp() { Base& b = *this; }
};
вот это обьявление Base& b = *this; нормально работает. Я что то неправильно понял?
Вообще, почему это не должно работать? Ты находишься в классе, можешь трогать прайват, протектед и паблик поля. Я бы посоветовал тебе посмотреть лекцию о наследовании Константина Владимирова балакаврского курса.
Заметь, что вне(за исключением друзей) класса такая (Base& b = d) запись не будет возможной
Да, это я понял
Та вот я тоже не понимаю, но полагаю, что автор имел ввиду про недоступность в унаследованных классах от Derived уже
Вот вам эвристика для разгона интуиции. private наследование очень похоже на создание private поля в теле класса. С private родителем можно делать примерно тоже самое, что и с private полем.
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
private private private
.. Но при этом не надо при вызове методов писать имя поля
Всё ещё неправильно :( Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
Обсуждают сегодня