exp |
Отправлено: 15.04.2006, 22:20 |
|
Мастер участка
Группа: Участник
Сообщений: 304
|
Диаграмма классов выглядит так, как показано на схеме.
Мне нужно добиться, чтобы все классы, кроме TLeaf, имели открытый метод AddChildren. Дело осложнено тем, что класс TAnswerNode имеет кроме AddChildren открытые методы, которые должны быть доступны в TLeaf. В противном случае просто начледовал бы со спецификатором protected, а сейчас получается, что этим я защищаю нужные мне методы
Как быть подскажите, пожалуйста.
Присоединить изображение
|
|
Георгий |
Отправлено: 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
|
Спасибо.
Ирония заключается в том, что я пытался так сделать. Наверное, где-то криванул.
|
|