我有一AdjacencyList
堂课,我希望所有的图形算法都与它分开。假设所有算法都是函子并且派生自GraphAlgorithm
抽象基类。我如何使它工作?
我目前在想,
class AdjacencyList
{
// ...
friend class GraphAlgorithm;
// ...
};
但它是否允许GraphAlgorithm 的子类访问AdjacencyList的私有成员?
欢迎任何其他方法。
我有一AdjacencyList
堂课,我希望所有的图形算法都与它分开。假设所有算法都是函子并且派生自GraphAlgorithm
抽象基类。我如何使它工作?
我目前在想,
class AdjacencyList
{
// ...
friend class GraphAlgorithm;
// ...
};
但它是否允许GraphAlgorithm 的子类访问AdjacencyList的私有成员?
欢迎任何其他方法。
但它是否允许 GraphAlgorithm 的子类访问 AdjacencyList 的私有成员?
不,不是的。友谊不是传递的。
无论如何,每当您需要friend
声明时,您都应该将其视为代码异味并重新考虑您的设计。
我宁愿在 中使用 getter,AdjacencyList
这样 aGraphAlgorithm
可以对它可以从 的方法访问的成员进行操作AdjacencyList
。
您可能想查看策略模式:“定义一系列算法,封装每个算法,并使它们可互换。策略让算法独立于使用它的客户端而变化。”
例如访问dofactory Wiki上的策略模式