标题:const member function problem?
只看楼主
smallcat
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2006-2-20
 问题点数:0 回复次数:4 
const member function problem?



const 成员函数问题:


如何在const成员函数中修改对象状态?
例如:
class String
{
private:
char *str;
unsigned size;
unsigned b_sizeIsvalid :1;
public:

/// constructor &destructor
.............
...............
unsigned Length(void)const;
};

unsigned String::Length(void)const
{
if(!b_sizeIsvalid)
{
size=strlen(str)+1; //error
b_sizeIsvalid=1; //error
}
return size;
}
//应该怎样修改Length函数是其在不改变const 属性的情况下,完成对成员变量的修改呢?
路过的不妨发表以下自己的意见.


搜索更多相关主题的帖子: problem member function const 
2006-03-11 21:52
dang800919
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2005-12-5
得分:0 

我记得好象是 用mutable数据成员
不知道我说的对不对
mutable永远不会是const成员
#include<cstring>
class String
{
private:
char *str;
mutable unsigned size;
mutable unsigned b_sizeIsvalid :1;
public:

/// constructor &destructor
unsigned Length(void)const;
};

unsigned String::Length(void)const
{
if(!b_sizeIsvalid)
{
size=strlen(str)+1; //error
b_sizeIsvalid=1; //error
}
return size;
}

2006-03-11 22:09
dang800919
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2005-12-5
得分:0 

#include<cstring>
class String
{
private:
char *str;
mutable unsigned size;
mutable unsigned b_sizeIsvalid :1;
public:

/// constructor &destructor
unsigned Length(void)const;
};

unsigned String::Length(void)const
{
if(!b_sizeIsvalid)
{
size=strlen(str)+1;
b_sizeIsvalid=1;
}
return size;
}

2006-03-11 22:09
dang800919
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2005-12-5
得分:0 

mutable允许修改 一个类的数据成员 即使他是一个CONST对象的数据成员
mutable的意思是易变的 mutable数据成员永远不会是const成员,即使他是一个const对象的数据成员....
简单的来说,应该是这样的

2006-03-11 22:13
smallcat
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2006-2-20
得分:0 
谢谢各位,现在编译通过了,唉真实不容易呀....
我这里也有一个方法,也可以满足要求.

class String
{
private:
char *str;
unsigned size;
unsigned b_sizeIsvalid :1;
public:

/// constructor &destructor
unsigned Length(void)const;
};

unsigned String::Length(void)const
{
String * const localthis=(String * const)this;

if(!b_sizeIsvalid)
{
localthis->size=strlen(str)+1;
localthis->b_sizeIsvalid=1;
}
return size;
}


交流让我们共同进步,为了中国的软件产业努力.......


逃避不一定躲的过,面对不一定最难过。孤单不一定不快乐,正如得到不一定能长久~~!◎#¥%
2006-03-11 22:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-49851-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.201568 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved