Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.76
CyBOSSeR
Эксперт С++
2304 / 1674 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
#1

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

01.11.2009, 15:16. Просмотров 3666. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2009, 15:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Доступ к protected членам базового класса (C++):

Как получить доступ к элементам формы из созданного класса? - C++
Всем доброго времени суток!:help: Скажите, пожалуйста, как мне обратиться к элементу формы(например TextBox1) извне, то есть из...

Доступ к объекту класса - C++ Builder
Всем привет! В h файле объявлено три класса: HeavyCar, Fuller, Emptier. Это код кнопки ПУСК: int i; //HeavyCar **masCar; masCar=new...

ДОступ из класса в класс - C++ Builder
Есть три класса допустим класс Base, имеет переменную hp, класс А и класс Б. У каждого из них есть своя переменная hp, как изменить...

Доступ к методам класса главной формы из дочерней - C++ Builder
Здравствуйте! Перелазил форум и в поисковике тоже искал, но нечего не подвернулось, может быть плохо искал. Суть втом, что я немогу вызвать...

Как получить доступ к TImage - элементу класса? - C++ Builder
Добрый день. вот такой вот класс у меня есть: class wall { private: TImage *wall_image; int x, y; bool...

Доступ к элементам класса во всех кнопках формы - C++ Builder
Объявляю классclass Field { public: int a; int b; }; Field *res=new Field;В функциях в класс заносятся определенные данные и...

3
Nick Alte
Эксперт С++
1640 / 1012 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
01.11.2009, 15:41 #2
Дело в том, что parent твоему классу не родной. Вот если бы ты добавлял к предку, т.е.
C++
1
this->Element::AddTo(element);
, то было бы нормально. Так что либо дружить, либо открывать интерфейс.
1
CyBOSSeR
Эксперт С++
2304 / 1674 / 86
Регистрация: 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
Nick Alte
Эксперт С++
1640 / 1012 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
02.11.2009, 20:41 #4
В принципе, здесь нужно чётко определиться со смыслом реализуемых операций. Вот у тебя есть группа, реализующая интерфейс Element. Какую роль играет член parent, для чего он нужен? Что выполняет функция Add и что выполняет функция AddTo? Почему в Group они реализованы именно так, а не иначе? Как предполагается реализовать их в других элементах? К сожалению, из приведённого кода у меня не получилось извлечь достаточно чёткие ответы на эти вопросы. Как правило, при исчерпывающем ответе на такие вопросы всё становится ясно само собой...
0
02.11.2009, 20:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2009, 20:41
Привет! Вот еще темы с ответами:

Проблемы с доступом к членам класса - Visual C++
Имеется консольный проект, состоящий из 3-х файлов: main.cpp, Classes.h, Classes.cpp. В файлах Classes.h и Classes.cpp описан базовый класс...

Из производного класса вызвать функцию базового - Visual C++
Есть два класса, необходимо из производного класса вызвать функцию базового. // ConsoleApplication2.cpp: определяет точку входа для...

MFC, доступ к элементу класса (StatusBar) из другого класса - Visual C++
Здравствуйте. Я новичок и нигде не смог найти ответ на следующий видимо простой вопрос. Подскажите, пожалуйста. Проблема коротко: не...

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


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

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

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