Унаследованный класс С++ имеет одно и то же имя

В С++ вы можете поместить член в базовый класс и член с тем же именем в унаследованном классе.

Как я могу получить доступ к определенному в унаследованном классе?

Ответ 1

В этом случае вы должны полностью квалифицировать имя участника.

class A
{
public:
  int x;
};


class B : public A
{
public:
  int x;
  B() 
  { 
    x = 0;
    A::x = 1;
  }
};

Ответ 2

Если вы укажете имя, вы автоматически получите доступ к нему в унаследованном классе. Если вы имеете в виду, как вы получаете доступ к таковой в базовом классе, используйте Base:: member

Ответ 3

Чтобы получить доступ к скрытому члену в базовом классе, вы должны префикс имени участника с именем базового класса. См. Ниже:

class A
{
protected:
   int i;
};

class B : public A
{
public:
   void foo( void )
   {
      int a_i = A::i;
      int b_i = i;
      int b_i_as_well = B::i;
   }
private:
   int i;
};

Ответ 4

Да.

Подтвердите свой вызов, f(), с именем класса: SpecificClass::f().

Ответ 5

Один подход (уже упоминавшийся во всех других ответах) заключается в использовании имени квалифицированного члена, например Base::member. Его можно использовать в сочетании с явным доступом с помощью указателя this, если ваш стиль: this->Base::member.

Другим подходом является выполнение доступа через указатель this, явно преобразованный в тип базового класса: ((Base *) this)->member.

Конечно, приведенные выше ссылки на указатель this сделаны в предположении, что вы пытаетесь получить доступ к члену из некоторой нестатической функции-члена класса. Для доступа, если от "снаружи", те же самые трюки могут применяться к любому другому указателю (или ссылке): some_pointer->Base::member или ((Base *) some_pointer)->member.

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

Ответ 6

Префикс с помощью classname::.