QuestObjects are helpless themselves. All game interactions with any QuestObject exist because of its Controller. The class validates user's interactions which directly related to the current QuestObject and changes the game. It knows what objects must be changed and how. Also he asks its QuestObject what is exactly required to proceed those changes. He doesn't care what kind of QuestObject it works with.
Controller takes its QuestObject through template<typename object&>
construction and validates user's behavior according to requirements of the QuestObject.
class QuestObject
{
private:
QuestDialogue dialogue;
bool triggeredFlag = false;
public:
virtual ~QuestObject() = 0;
void setDialogue();
QuestDialogue getDialogue();
};