@comradegoryaev

Где хранятся закрытые данные базового класса при обращении к ним через производный класс (C++)?

Допустим есть базовый класс:
class A
{
public:
   int geti();
   void seti(int);
private:
   int i;
};

int A::geti()
{
return i;
}

void A::seti(int n)
{
i = n;
}

И есть производный от него класс:
class B: public A
{
    //содержимое В не важно
};

Допустим в main() есть следующий код:
B ob;
ob.seti(10);
cout<<ob.geti();


Вопрос: так как i - закрытый член базового класса, в производном классе его нет. Тогда куда записывается 10 в строке ob.seti(10)? Пример взят из книги Шилдта "Самоучитель С++", но ответа на свой вопрос я не нашел
  • Вопрос задан
  • 2518 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
так как i - закрытый член базового класса, в производном классе его нет

Ошибка здесь. Наследование выражает отношение "являться": наследник является всеми своими родителями. Объект класса B является и объектом класса А и содержит все его поля и методы. Но не ко всем ним имеет доступ.

ответа на свой вопрос я не нашел

Ответ на ваш вопрос в разделе 10 Derived Classes стандарта С++, который в редакции 98 года говорит:
Unless redefined in the derived class, members of a base class are also considered to be members of the derived class. The base class members are said to be inherited by the derived class.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Детали реализации зависят от конкретного компилятора и платформы. Стандарт гарантирует только то, что компилятор будет ругаться на попытку обращения ко внутреннему члену класса извне. Как сама переменная будет хранится, стандарт не сообщает.
Ответ написан
Комментировать
tsarevfs
@tsarevfs Куратор тега C++
C++ developer
Модификаторы доступа совершенно не влияют на представление данных. Грубо говоря если в некотором коде заменить все private на public в результате компиляции ничего не изменится. Эти модификаторы ограничивают только то, что можно использовать в C++ коде.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы