Что я думаю о виртуальном классе, так это то, что если производный класс имеет общедоступную базу, скажем, базу классов, то указатель на производный может быть присвоен переменной типа указатель на базу без использования какого-либо явного преобразования типа. Но что если мы находимся внутри базового класса, то как мы можем вызывать функции производного класса. Я приведу пример:
class Graph{
public:
Graph(string);
virtual bool addEdge(string,string);
}
class Direct:public Graph{
public:
Direct(string);
bool addEdge(string,string);
}
Direct::Direct(string filename):Graph(filename){};
Когда я вызываю конструктор класса Direct, он вызывает Graph. Теперь давайте подумаем, что функция Graph добавила вызовы.
Graph(string str){
addedge(str,str);
}
Когда он вызывает addge, даже если функция виртуальная, он вызывает Graph :: edge. То, что я хочу, это вызвать Direct :: addge. Как это можно сделать?