Допустим, у меня есть два класса - Graph и Vertex , которые имеют некоторые базовые члены и методы, необходимые для представления общего Graph.Они уже полностью реализованы и отлично работают для стандартных графов.
class Vertex {
int id;
Vertex(int id) : id(id) {}
// ...
}
class Graph {
std::vector<Vertex *> vertices;
void addVertex(int id) {
vertices.push_back(new Vertex(id));
}
// ...
}
И я хотел бы расширить эти классы, чтобы добавить некоторые функциональные возможности, связанные с проблемами.Например, я хочу иметь Вершина , которая хранит его цвет.Вот почему я объявляю другой класс с именем VertexC , который наследуется от Vertex и добавляет новый член.Так что теперь я хотел бы иметь специализированную версию Graph - GraphC , которая может управлять новыми VertexC свойствами.
class VertexC: Vertex {
string colour;
string getColour() {
return colour;
}
}
class GraphC: Graph {
void doSomething(string colour) {
for(auto &v: vertices) {
if(v->getColour() == "red") // Do something...
}
}
}
Но яне может сделать это, потому что Graph :: vertices имеют тип Vertex *, а не VertexC *, поэтому они не имеют getColour () метод.Любые предложения, как преодолеть это?
Редактировать: Немного изменил описание, чтобы представить мою проблему более прямым способом.