标题:难题啊难题,求解
只看楼主
上善若飞
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2010-11-24
结帖率:100%
 问题点数:0 回复次数:7 
难题啊难题,求解
我看了所有资料,关于类中的const对象,用const限定的对象只能访问带const限定的成员函数,不然函数不能保证不修改该对象的状态,有没有哪位高手可以说详细点,这些状态是指什么,最好举个例子


下面是我所遇到的这个出错:
int compare( const Box&  otherbox)
{
  int vol1=volume();
int vol2=otherbox.volume();
  return vol1>vol2? 1:(vol1<vol2? -1:0);
}
这里用const限定了对象之后,红色的那一行就出错,问题就出在这个volume()函数没有被const限定,求解啊!!!
搜索更多相关主题的帖子: 难题 求解 
2010-11-24 18:38
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
得分:0 
LZ知道const的作用吧。解释下?

离恨恰如春草,更行更远还生。
2010-11-24 18:47
上善若飞
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2010-11-24
得分:0 
回复 2楼 玩出来的代码
const有很多种用法,但一般的作用都是防止被定义的变量被修改,等同于常量,还请您多指教!
2010-11-24 18:54
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
得分:0 
既然知道const的作用那就不难理解  <用const限定的对象只能访问带const限定的成员函数>这句话了,
看如下类
class A
{
public:
    void fun(){}
};
int main()
{
    const A a;
    a.fun();
    return 0;
}
a就对应着用const修饰的对象,若有上面的调用a.fun()就会引起你所说的错误,因为const对象是不允许修改的/但fun()函数没有被声明为const(void fun()const{})的形式,他不保证会改变对象,因此会错误。

离恨恰如春草,更行更远还生。
2010-11-24 19:12
上善若飞
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2010-11-24
得分:0 
回复 4楼 玩出来的代码
我理解你的意思,但是我不明白函数在哪里修改被const限定的对象?你能给个函数修改了这个对象的例子吗?麻烦了,我有点专牛角
2010-11-24 19:26
上善若飞
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2010-11-24
得分:0 
回复 4楼 玩出来的代码
或者我这样问,假如我编写一个函数,这个函数保证不修改对象,那么这个函数不加const,为什么也不能通过编译?
2010-11-24 19:30
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
得分:0 
或许你的函数没有修改对象,但是你知道编译器是不知道的,他不确定你是否在函数中修改了这个对象因此不允许这样调用。
在C++中类似的情况也很多,比如临时对象,当用一个临时对象当作实参调用某函数时,函数的形参必须为const引用(此刻说引用,不考虑对象的copy),临时对象同样不允许改变,你或许可以保证不改变他,但编译器并不能确定你一定不修改这个临时对象。

离恨恰如春草,更行更远还生。
2010-11-24 19:37
上善若飞
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2010-11-24
得分:0 
回复 7楼 玩出来的代码
明白了,拜谢!
2010-11-24 19:50



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




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

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