gpt4 book ai didi

C++ Matrix 类层次结构

转载 作者:可可西里 更新时间:2023-11-01 16:39:05 24 4
gpt4 key购买 nike

矩阵软件库是否应该有一个根类(例如,MatrixBase),更多专业(或更多约束)矩阵类(例如,SparseMatrix, UpperTriangluarMatrix, 等)派生?如果是这样,派生类应该公开/保护/私有(private)地派生吗?如果不是,它们是否应该由一个封装了通用功能的实现类组成,并且在其他方​​面不相关?还有别的吗?

我曾与一位软件开发人员同事(我本身不是)讨论过这个问题,他提到从更一般的类派生出更受限制的类是一个常见的编程设计错误(例如,他使用了示例从 Ellipse 类派生 Circle 类并不是一个好主意,这与矩阵设计问题类似),即使 SparseMatrix 确实如此“是一个”MatrixBase。基类和派生类所呈现的接口(interface)对于基本操作应该是相同的;对于专门的操作,派生类将具有可能无法为任意 MatrixBase 对象实现的附加功能。例如,我们可以仅为 PositiveDefiniteMatrix 类对象计算 cholesky 分解;然而,乘以标量对于基类和派生类应该以相同的方式工作。此外,即使底层数据存储实现不同,operator()(int,int) 也应按预期对任何类型的矩阵类工作。

我已经开始研究一些开源矩阵库,它看起来像是一个混合包(或者我正在寻找一个混合库)。我正计划帮助重构一个数学库,这一直是一个争论点,我想发表意见(除非真的有一个客观的正确答案来回答这个问题) 关于什么设计理念是最好的,以及任何合理方法的优缺点是什么。

最佳答案

Ellipse 的 Circle 子类(或 Rectangle 的 Square 子类)的问题发生在您可以修改每个 Ellipse 接口(interface)的一个维度时,使圆不再是圆(并且正方形不再是正方形) .

如果您只允许不可修改的矩阵,那么您是安全的,并且您可以以自然的方式构建您的类型层次结构。

关于C++ Matrix 类层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2759304/

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