读书人

关于const的有关问题

发布时间: 2012-02-27 10:00:22 作者: rapoo

关于const的问题
数据结构的课程设计要求实现单链表,我的节点类和链表类简单定义如下
/* 单链表的结点类型*/
template <typename DataType>
class LNode
{
public:
DataType data;
LNode <DataType> *next;
LNode(){};
};
/*链表类*/
template <typename DataType>
class ClassLinkedList
{
protected:
int Length;
LNode <DataType> * Head;
public:
……
}
在class ClassLinkedList中有一个函数定义如下:
const LNode <DataType> * LinkedListGetNode(int (*compare)(const LNode <DataType> * x))
作用是用来返回符合条件的节点(条件由参数中的compare函数决定),为了防止用户修改链表的指针域,所以返回值用const修饰了。这个函数是用户唯一可能获得链表节点的途径。

同时class ClassLinkedList中有另一个函数
void ClassLinkedListAction(const LNode <DataType> * x)
作用是对用户指定的节点x执行允许的操作,其中的操作包括修改指针域。
因为上面那个函数是用户唯一能获得链接节点的途径,所以用户传入的参数肯定是使用const修饰了的。这导致我也没有办法对传入的参数指定的节点的指针域进行修改。
不知道有没有办法可以让我在函数void ClassLinkedListAction(const LNode <DataType> * x)中对指针变量x及其所指向的变量进行修改。
(我记得在以前看到的书上说有针对const修饰符的语句可以让常量能被修改)


[解决办法]
使用const_cast应该可以去掉常量性吧!

读书人网 >C++

热点推荐