Есть ли простой способ использовать переменные базового класса? - PullRequest
3 голосов
/ 27 октября 2008

Если у вас есть производный класс, существует ли более простой способ обращения к переменной из метода, отличного от:

BaseClass::variable

EDIT
Как это случилось, я нашел страницу, которая объяснила эту проблему, используя вместо этого функции: Ошибки производных шаблонов . Видимо, это имеет значение при использовании шаблонов классов.

Ответы [ 2 ]

10 голосов
/ 27 октября 2008

Если переменная-член базового класса является защищенной или общедоступной, вы можете просто обратиться к ней по имени в любой функции-члене производного класса. Если он является частным по отношению к базовому классу, компилятор вообще не разрешит производному классу доступ к нему. Пример:


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

1 голос
/ 27 октября 2008
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...