Скажите, у меня есть абстрактный класс
class NecessaryDanger
{
public:
virtual void doSomethingDangerous() =0;
}
и класс, производный от этого класса:
class DoesOtherStuff : public NecessaryDanger
{
//stuff
void otherMethod();
void doSomethingDangerous();
}
есть ли способ, которым я могу разрешить доступ только к doSomethingDangerous (), например
DoesOtherStuff d;
d = DoesOtherStuff();
d.otherMethod(); //OK
d.doSomethingDangerous(); //error
NecessaryDanger* n = &d;
n->doSomethingDangerous(); //OK
Я пока не очень хорош в C ++, поэтому приведенный выше код может быть не совсем правильным, но вы, возможно, поняли идею. У меня есть набор классов, которые должны иметь возможность делать «что-то опасное» (по-своему), что может вызвать проблемы, если более чем один объект из этих классов делает эту опасную вещь. Я хотел бы иметь класс менеджера, который имеет указатель NeededDanger только на один объект. Если бы метод doSomethingDangerous мог быть вызван только объектом NeededDanger, случайному вызову doSomethingDangerous было бы сложнее произойти и вызвать у меня головную боль в будущем.
Заранее спасибо за помощь. Извините заранее, если это глупый вопрос!