Есть ли простой способ использовать переменные базового класса?
-
04-07-2019 - |
Вопрос
Если у вас есть производный класс, есть ли более простой способ обратиться к переменной из метода, отличного от:
BaseClass::variable
Редактировать
Так получилось, что я нашел страницу, на которой объяснялась эта проблема с использованием функций вместо этого:Ошибки классов, производных от шаблона.По-видимому, это имеет значение при использовании шаблонов классов.
Решение
Если переменная-член базового класса защищена или общедоступна, вы можете просто ссылаться на нее по имени в любой функции-члене производного класса.Если он является закрытым для базового класса, компилятор вообще не позволит производному классу получить к нему доступ.Пример:
class Base
{
protected:
int a;
private:
int b;
};
class Derived : public Base
{
void foo()
{
a = 5; // works
b = 10; // error!
}
};
Также есть кое-что, что можно сказать о сохранении всех переменных-членов закрытыми и предоставлении геттеров и сеттеров по мере необходимости.
Кроме того, остерегайтесь "скрытия" элементов данных:
class Base
{
public:
int a;
};
class Derived : public Base
{
public:
int a;
};
Это создаст две переменные с именами a
:один в Base
, один в Derived
, и это, скорее всего, приведет к путанице и ошибкам.
Другие советы
Похожие: Использование “super” в C ++