나는 이상하게 생각하고 있었다 :트리의 노드에 다중 상속이 허용됩니까?
나무로, 뿌리에는 다수 아이들 및 ID 없음이있을 수있다. 모든 노드 (루트 제외)는 ID를 가지며 리프 노드는 하위 노드를 가질 수 없습니다. 각 깊이에 대해 사용해야하는 유형이 고정되어 있습니다. 따라서 나뭇잎은 항상 같은 유형이므로 나뭇잎의 부모도 마찬가지입니다.
루트와 노드가 아이들과있을 수 있기 때문에에만 다중 상속의 다음 사용이 허용되는 경우 노드가 궁금 id를 가지고 :
class NodeWithId
{
private:
std::string m_id;
};
template<typename T>
class NodeWithChildren
{
private:
std::vector<T> m_nodes;
};
class Network: public NodeWithChildren<Subnet>
{
};
class Subnet: public NodeWithChildren<Machine>,
public NodeWithId
{
};
class Machine: public NodeWithChildren<Application>,
public NodeWithId
{
};
class Application: public NodeWithId
{
};
또는이를 구현하는 더 나은 방법이?
편집 :
- 제거 가상
- 변경 클래스 이름 모든
왜 가상 계승을 사용하고 있습니까? 어떤 상속 경로에도 공유 기본 클래스가 없습니다. –
모든 종류의 노드에 대해 하나의 클래스를 사용하고 리프의 빈 자식 벡터를 사용합니다. – Manuel
마누엘에 동의합니다. ID에 -1 또는 0 또는 다른 예약 된 값을 사용합니다. 뿌리 내리고 디자인을 단순화하십시오. – Bill