Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
Эксперт С++
2337 / 1710 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
1

Доступ к protected членам базового класса

01.11.2009, 15:16. Показов 5010. Ответов 3
Метки нет (Все метки)

Здравствуйте, форумчане!
Ниже приведенный код при компиляции вызывает следующую ошибку:
error C2248: 'Element::AddTo' : cannot access protected member declared in class 'Element' element.cpp 21.
Всю жизнь считал, что protected члены базового класса доступны для производных классов.
Разъясните, это я дурак, или лыжи не едут?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
 
class Element
{
public:
  virtual void Add(Element*) = 0;
 
protected:
  virtual void AddTo(Element*) = 0;
};
 
class Group : public Element
{
public:
  Group()
  : parent(NULL)
  {}
 
  void Add(Element* element)
  {
    element->AddTo(this);
  }
 
protected:
  void AddTo(Element* element)
  {
    parent = element;
  }
 
protected:
  Element* parent;
};
 
int main()
{
  return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2009, 15:16
Ответы с готовыми решениями:

Доступ к закрытым членам базового класса
помогите понять что я не так сделал ? #include &lt;iostream&gt; using namespace std; class A { ...

Шаблонный Список. не могу получить доступ к protected членам
Здравствуйте! Я пытаюсь сделать шаблонный список, все вроде бы пашет. но есть 2 проблемы. 1....

Не могу обратиться к членам базового класса
Не могу обратиться к членам базового класса, если они в protected. Почему так? Ведь мы же...

Доступ к членам класса
Объект класса не может получить доступ к своим переменным?

3
Эксперт С++
1667 / 1039 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
01.11.2009, 15:41 2
Дело в том, что parent твоему классу не родной. Вот если бы ты добавлял к предку, т.е.
C++
1
this->Element::AddTo(element);
, то было бы нормально. Так что либо дружить, либо открывать интерфейс.
1
Эксперт С++
2337 / 1710 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
01.11.2009, 16:28  [ТС] 3
Честно говоря, суть проблемы для меня осталась довольно таки туманной...
Дружить и открывать не айс.
Это получается из AddTo вызывать Add?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Element
{
public:
  virtual void AddTo(Element*) = 0;
 
protected:
  virtual void Add(Element*) = 0;
};
 
class Group : public Element
{
public:
  Group()
  : parent(NULL)
  {}
 
  void AddTo(Element* element)
  {
    element->Add(this);
    parent = element;
  }
 
protected:
  void Add(Element* element)
  {
  }
 
protected:
  Element* parent;
};
Так получается?
Как-то немного семантика страдает в этом случае. Более логично, по моему мнению, вызывать AddTo из Add.

Добавлено через 32 минуты
Как разрулить эту ситуацию?
0
Эксперт С++
1667 / 1039 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
02.11.2009, 20:41 4
В принципе, здесь нужно чётко определиться со смыслом реализуемых операций. Вот у тебя есть группа, реализующая интерфейс Element. Какую роль играет член parent, для чего он нужен? Что выполняет функция Add и что выполняет функция AddTo? Почему в Group они реализованы именно так, а не иначе? Как предполагается реализовать их в других элементах? К сожалению, из приведённого кода у меня не получилось извлечь достаточно чёткие ответы на эти вопросы. Как правило, при исчерпывающем ответе на такие вопросы всё становится ясно само собой...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.11.2009, 20:41

Доступ к членам класса
Есть два класса: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; class CPerson...

Доступ к private членам класса
Почему при таком объявлении не работает оператор вывода, по идее он же объявлен как друг класса и...

Доступ к защищенным членам класса
Срочно!! помогите пожалуйста Что не правильно : class my { int i; public: ………....

Доступ к закрытым членам класса(шаблона)
Вопрос почему компилятор выдает ошибку в функции main? Ситуация следующая имеется шаблон (класс)...

Доступ к членам одного класса с другого
Есть три файла: A.cpp: #include &quot;B.cpp&quot; class AA { int A; public: AA(int a) { A = a;

Как получить доступ к членам класса из функций
Есть код типа //*****************************************************************************...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.