【发布时间】:2021-10-26 07:27:50
【问题描述】:
考虑以下程序
class Node {
public:
virtual void Visit() = 0;
};
class Graph {
public:
virtual void Visit();
};
class GraphNode1 : public Node, Graph {
};
class GraphNode2 : public Node, Graph {
using Graph::Visit;
};
class GraphNode3 : public Node, Graph {
public:
virtual void Visit() {
Graph::Visit();
}
};
int main()
{
GraphNode1 a;
GraphNode2 b;
GraphNode3 c;
}
它不编译,但抱怨GraphNode1 和GraphNode2 是抽象的,因为Node::Visit 是纯虚拟的。
我会假设GraphNode1 和GraphNode2 都很好,因为:
- 它们包含
Visit的实现。 - 它们只包含
Visit的一个实现,因此应该没有歧义。
谁能解释为什么我必须创建一个显式的实现才能使其工作。
【问题讨论】:
标签: c++ pure-virtual