gpt4 book ai didi

c++ - 类继承层次结构设计问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:27:04 25 4
gpt4 key购买 nike

我有以下图表类层次结构:

typedef vector<int> ArrayI;
typedef vector<Array<long>> Mat2DB;
typedef vector<ArrayI> adjList;

class baseGraph {
int nodes;
ArrayI degree;
//some member functions.
}

class matGraph: public baseGraph {
Mat2DB matrix;
//member functions.
}

class lMatGraph: public matGraph {
ArrayI labels;
//member functions.
}

class listGraph: public baseGraph {
adjList list;
//member functions.
}

class lListGraph: public listGraph {
ArrayI labels;
//member functions.
}

现在在这个类中我有许多其他函数,大部分是虚拟的,所以当我在使用基类指针时调用正确的函数。

例如,我有一个函数sssp(int node),它实现了单源最短路径。 class matGraphclass listGraph的实现是不同的,分别是图的邻接矩阵表示和邻接表表示。现在不需要更改这些图的标记版本的定义,所以我不会在 lListGraphlMatGraph

中再次定义这些函数

现在我遇到的唯一问题是 lListGraphlMatGraph 类中的 setLabel(const ArratI &)。我需要这个函数是虚拟的,以便通过基类指针调用它,但同时我没有任何东西,例如类 matGraphlistGraph 的标签。

我不知道我的设计层次结构是否正确,但对我来说似乎很直观。所以对此有任何评论都很好。我可以用 setLabel 函数做什么。拥有这样的功能是否可以(对我来说它看起来像是一种解决方法所以这个问题)或者我是否需要重新考虑我的类层次结构。

P.S.:如果有一些书可以让我练习像这样的设计问题,我也很乐意。我经常遇到这些困境,但不知道该怎么办。

编辑:

类图的使用在另一个类 clustering 中使用,我有一个成员 baseGraph *graph

class clustering {
baseGraph *graph;
}

我在这里存储指向基类的指针,以便我可以使用class graph 中的不同算法(作为函数实现)。对于聚类类,它又取决于我想使用哪种类型的图。

最佳答案

也许是这个?

typedef vector<int> ArrayI;
typedef vector<Array<long>> Mat2DB;
typedef vector<ArrayI> adjList;

class baseGraph {
int nodes;
ArrayI degree;
virtual void sssp(int node);
//some member functions.
}

class labeledGraph: public virtual baseGraph {
ArrayI labels;
virtual void setLabel(const ArratI &);
//member functions.
}

class matGraph: public virtual baseGraph {
Mat2DB matrix;
//member functions.
}

class lMatGraph: public virtual matGraph, public virtual labeledGraph {
//member functions.
}

class listGraph: public virtual baseGraph {
adjList list;
//member functions.
}

class lListGraph: public virtual listGraph, public virtual labeledGraph {
//member functions.
}

我在这里假设你错误地从 graph 继承,而你应该从 baseGraph 继承(typeo)——尽管即使不是,它也归结为同一点。

也是粗略的编码,如果你有问题或者有错误尽管问。

关于c++ - 类继承层次结构设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17658669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com