如何使构造函数接受一个非常量对象
How can I make constructor take a non-const object?
当谈到C++中的常量类型时,我总是会迷失方向,而我的问题本质上是这些类型。
我有以下情况:我有一个类Matrix,本质上是一个二维链表(一个带哨兵的环)和一个类似迭代器的类,它可以选择一行(选择行的方法),然后遍历它(运算符++)。为了获得这一点,迭代器存储了3个指针:主哨兵、选定子列表(行)的哨兵和当前选定的节点(让我们将其命名为插入符号)。如果运算符++命中子列表sentinel,则到达行的末尾,如果行选择命中主sentinel则到达矩阵的末尾。
现在,由于列表是单独链接的,并且我希望我的迭代器提供删除功能,所以我决定将当前节点字段的Node**
类型存储在迭代器中。但这会给构造函数带来一些问题。
我决定只允许使用两种类型的构造函数——一种采用Matrix,另一种采用其他迭代器。这是我的问题。从矩阵创建的迭代器的初始状态将其所有指针都放在同一点上——main sentinel。现在,从g++告诉我的内容来看,接受Matrix
的构造函数必须接受类型const Matrix&
。但如果是这样的话,我就不能为我的插入符号(Node**
)分配指向矩阵自己指针的指针,因为它是常量,而插入符号不能是常量。
我怎么可能解决这个问题?为什么构造函数不能接受非常量实体?我可以在构造函数中将矩阵从常量转换为非常量吗?提前感谢您的任何提示。
您必须将矩阵和迭代器分开,这样仅仅迭代不会以任何方式改变矩阵,并且迭代所需的任何数据都存储在迭代器类中。
此外,如果您需要迭代器对const Matrix对象进行操作,则还需要提供一个const迭代器,该迭代器可以具有指向Matrix的const引用/指针。但在复制构造函数中,您不一定需要这个,您可以直接访问字段,毕竟这是同一个类。
为了让迭代器类访问Matrix的内部,您可以使用friend关键字,或者(最好)您可以让迭代程序类成为Matrix的内部类。
- 我从int x[3]得到的一个非常奇怪的输出;
- 一个非常简单的win32套接字代码,但工作错误
- 超过CPU时间限制:当MPI_Sent一个非常大的int*时
- 无法使用crfsuite的C++ API编译一个非常简单的Tagger示例
- C++中一个非常简单的枚举类错误
- 我在内存泄漏和字符串方面遇到了一个非常奇怪的问题
- 我正在写一个非常简单的字母评分系统,if语句是最有效的吗?
- 我刚刚创建了一个非常快速的素数排序方法.如何改进?
- 在64位系统上创建一个非常大的数组的缺点是什么
- (c++)代码中一个非常奇怪的问题
- 打印出一个非常小的浮点数
- C++:C字符串、指针和一个非常有趣的while循环
- 在 matlab 中编写一个非常基本的 mex 函数
- 在C 中编写一个非常简单的事件类
- 如何取一个非常大的数的根
- 在使用Qt Creator创建一个非常简单的项目时,在Qt中遇到"segmentation fault"
- 使用C++计算一个非常大的幂
- 一个非常弱的引用(无法转换为共享)
- 在一个非常简单的程序中检测到内存泄漏.怎么办
- 非虚拟接口?(需要一个非常高性能的低级抽象)