Есть ли простой способ использовать переменные базового класса?

StackOverflow https://stackoverflow.com/questions/240874

  •  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, и это, скорее всего, приведет к путанице и ошибкам.

Другие советы

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top