В настоящее время я работаю с Big C ++ 2nd Edition, используя Code :: Blocks 17.12, в главе о наследовании
В книге представлен тип защищенной переменной для случаев, когда вы хотите разрешить производному классу доступ к указанной переменной.
Книга также предупреждает, что защищенные элементы страдают от некоторых ловушек переменной publi c: в худших случаях производные члены класса могут повредить данные базового класса
Книга демонстрирует использование защищенного члена в программе часов в специальном разделе, в котором они представляют это, но в конечном коде они в конечном итоге пошли с установкой переменной на private и затем с использованием некоторых вспомогательных функций get_ для доступа к этим закрытым данным. Эта закрытая комбинация с использованием вспомогательных функций всегда возвращала ошибки в моей IDE, и мне не удалось это исправить
Возьмите этот простой пример, который я создал для P8.1, записи сотрудника для программиста, с Базовый класс сотрудника и производный класс программиста. Я создал следующий ctor с именем переменной и значением sal, установленным на защищенный статус в базовом классе
Programmer::Programmer(string p_name, double p_sal)
:Employee(get_name(), get_sal())
{
name=p_name;
sal=p_sal;
}
С этим кодом программа работает отлично.
Исходя из учебника, если для переменных name и sal было установлено значение private в базе, то я должен иметь возможность выполнять код также, при условии, что я использую вспомогательную функцию get_, которую я создал для доступа данные.
Кто-нибудь может объяснить, в чем здесь проблема? Должен ли я быть в порядке с использованием защищенного или действительно есть способ сохранить все мои переменные закрытыми для классов?
Я также нашел это в https://docs.microsoft.com/en-us/cpp/cpp/protected-cpp?view=vs-2019
Защищенные члены, которые также объявлены как stati c, доступны для любого друга или функции-члена производного класса. Защищенные члены, которые не объявлены как stati c, доступны для друзей и функций-членов в производном классе только через указатель, ссылку или объект производного класса.
У меня нет до сих пор не рассмотрено c, поэтому я в конечном итоге попробовал несколько различных комбинаций с указателями и ссылками, ни одна из которых не сработала.
Я пытаюсь понять, когда использовать защищенный или использовать защищенный или частный книга не проясняет это. Есть идеи?