接口方法的实现
Implementation of methods of interface
我想要实现矩阵的表示。为此,我有两种类型的矩阵——正则矩阵和稀疏矩阵,它们的实现不同——一种是向量,另一种是索引和值的映射,它们都继承自Matrix
类。为此,我使用了策略模式,在这里我创建了基本抽象类Matrix
,这两个类继承自Matrix
-RegMatrix
和SparseMatrix
,以及MyMatrix
,它保存了一个指向Matrix
的指针。
我想实现+
运算符,它在Matrix
上操作并接收另一个Matrix
。但当我实现+
算子时,我可能会接收作为参数的稀疏/正则矩阵。
所以我有两个问题:
-
我唯一的提示是创建一个类型为"matrix"的迭代器,并为每种类型的矩阵(正则和稀疏)实现迭代器。我怎么能做这样的事?
-
假设我为这两种类型的"矩阵"实现了一个迭代器。如果我必须添加两种不同类型的矩阵,我如何使用不同的迭代器?我必须执行所有4种不同的情况吗?
操作员+看起来像:
Matrix& operator+(const Matrix& other)
{
.....
}
最好不要在基类中实现功能。
实现每个子类中的功能。这将允许使用最佳算法。
或者,您可以在基类中将getter和setter声明为抽象,并在基类实现中使用它们:
struct Matrix_Base
{
virtual int get_value(unsigned int row, unsigned int column) = 0;
virtual void set_value(int value, unsigned int row, unsigned int column) = 0;
Matrix_Base operator+(const Matrix_Base& other)
{
// perform addition
int sum = get_value(row, column) + other.get_value(column, row);
set_value(sum, row, column);
//...
}
};
记住,传递矩阵时,接收函数只能使用矩阵的常用函数(接口)。具体而言,函数必须在参数列表中使用专门的(子体)。
您只能为RegMatrix和2个转换运算符实现+运算符:1.从RegMatrix到SparseMatrix2.从稀疏矩阵到RegMatrix
性能要求是什么?
相关文章:
- 实现无开销push_back的最佳方法是什么
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 这是实现图形的坏方法吗
- 在 c++ 中实现嵌套循环的更短方法吗?
- 如何实现 Front() 方法以返回模板化双向链表C++的第一个元素?
- 如何在从抽象基派生的类中实现相同的方法?
- C++数组队列实现方法错误
- 有没有一种通用的方法来实现不变量
- 'using namespace'实现细节的便捷方法(仅标头库)?
- 使用非递归插入方法实现 AVL 树
- C ++类型特征:确保子类实现方法
- 实现基于数字值(正、负、零)的条件表达式的最佳方法
- 在C++上实现高斯赛德尔迭代方法
- C++方法实现:是否可以避免每次都键入类名?
- 如何知道C2259 VS 2017错误未实现哪种方法?
- C++强制在子类中实现方法,但具有不同的签名
- 避免在每个派生类中重新实现方法调用
- C :执行模板类型实现方法
- 在C++中实现方法时继承不起作用
- 还有更好的实现方法吗?