C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Вопрос по С++, Убрать метод из наследника
exp
Отправлено: 15.04.2006, 22:20


Мастер участка

Группа: Участник
Сообщений: 304



Диаграмма классов выглядит так, как показано на схеме.
Мне нужно добиться, чтобы все классы, кроме TLeaf, имели открытый метод AddChildren. Дело осложнено тем, что класс TAnswerNode имеет кроме AddChildren открытые методы, которые должны быть доступны в TLeaf. В противном случае просто начледовал бы со спецификатором protected, а сейчас получается, что этим я защищаю нужные мне методы sad.gif
Как быть подскажите, пожалуйста.

Присоединить изображение

Присоединить изображение

Георгий
Отправлено: 16.04.2006, 00:51


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



принаследовании можно переопределить область видимости метода:
CODE
class TNode
{
public:
void AddChildren(void){};
};

class TAnswerNode:public TNode
{
public:
void AddChildren(void){};
};

class TBranch:public TAnswerNode
{
public:
void AddChildren(void){};
};

class TLeaf:public TAnswerNode
{
protected:
void AddChildren(void){};
};

int main()
{

TNode a;
TAnswerNode b;
TBranch c;
TLeaf d;
a.AddChildren();
b.AddChildren();
c.AddChildren();
d.AddChildren();//error C2248: 'TLeaf::AddChildren' : cannot access protected member declared in class 'TLeaf'
return 0;
}
так же можно при наследовании просто изменить область видимости метода, без перегрузки
CODE
class TLeaf:public TAnswerNode
{
protected:
void AddChildren(void);
};
exp
Отправлено: 16.04.2006, 09:40


Мастер участка

Группа: Участник
Сообщений: 304



Спасибо.
Ирония заключается в том, что я пытался так сделать. Наверное, где-то криванул. smile.gif

Вернуться в Вопросы программирования в C++Builder