末尾的 const 是什么意思????

32131532 2007-08-12 10:09:07
class IntArray {
public:
// 相等与不相等操作 #2b
bool operator==( const IntArray& ) const;
bool operator!=( const IntArray& ) const;
// 赋值操作符 #2a
IntArray& operator=( const IntArray& );
int size() const; // #1
void sort(); // #4
int min() const; // #3a
int max() const; // #3b

// 如值在数组中找到
// 返回第一次出现的索引
// 否则返回-1
int find( int value ) const; // #3c
private:
// 私有实现代码
};


*****************************************************
其中这段代码
bool operator==( const IntArray& ) const;
bool operator!=( const IntArray& ) const;
中的 末尾的 const 是什么意思????
有什么作用??
...全文
1367 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
fish6344 2007-08-15
  • 打赏
  • 举报
回复
末尾的 const说明这二个成员函数是常型函数,如果没有这个const 的函数说明,那么当你的类IntArray如果被使用者声明为常量型对象,例如:

const IntArray _iar;//常量型对象;

则在重载运算“==”与“!=”的函数体中不以可访问常型的IntArray类的成员。成员函数有了const 说明,则可以在类实例化成常量对象时,仍可以提领其类成员。例如有如下类:

class X
{
long _test;
public:
X(){_test = 1;}//初始化_test为1;
void show()//没有const说明;
{
cout << "演示值: " << _test << endl;//函数访问类成员;
}
};

如下使用:

X _x;
_x.show(); //演示值:_test = 1,说明show()成员函数访问了_test;

如果使用者声明一个常量型对象,例如:

const X _x;
_x.show();//该行生成类似错误: 不能将“this”指针从“const X”转换为“X &”,

上述错误的意思是编译器在show()函数中安插的常型this指针不能转换为非常型指针this指针,也就是说show()不能访问_test!

如果修改show函数为常型函数,例如:

class X
{
long _test;
public:
X(){_test = 1;}//初始化_test为1;
void show(const& _l = 1) const //有const!
{
cout << "演示值: " << _test << endl;
}
};

则:

const X _x;
_x.show();//演示值:_test = 1,说明show()成员函数访问到了_test;

ivwenshwuai可演示上述程序即可明了!
guzhilei1986 2007-08-15
  • 打赏
  • 举报
回复
学习
alan001 2007-08-15
  • 打赏
  • 举报
回复
UP
wxk566 2007-08-15
  • 打赏
  • 举报
回复
mark
miraclezone520 2007-08-15
  • 打赏
  • 举报
回复
mark
lovekiky2007 2007-08-15
  • 打赏
  • 举报
回复
min() 是类 IntArray 中的常成员函数,可以引用,但不能修改本类中的数据成员
millky 2007-08-14
  • 打赏
  • 举报
回复
最后补充一点:参见scott meyers <effective C++>第三版Item 3(如果没记错的话,书不在身边)
lgdgyd2 2007-08-14
  • 打赏
  • 举报
回复
mark了!
lovesoo 2007-08-14
  • 打赏
  • 举报
回复
有两层的意思:
1。 函数体内,不可以修改成员变量。
(但是也不是绝对不能修改,把成员变量用mutable修饰就又可以了。)
2。此类的常实例,只能调用结尾由const修饰的函数。

正解。
。。。
redleaves 2007-08-14
  • 打赏
  • 举报
回复
曾经我也不知道是什么意思过....
zwylinux 2007-08-14
  • 打赏
  • 举报
回复
保证调用对象不被修改,但是const应该放在哪里呢?
想了想最后决定放在函数末尾了。
boolpc 2007-08-14
  • 打赏
  • 举报
回复
原来还有比我菜的。。。。
32131532 2007-08-12
  • 打赏
  • 举报
回复
如果不把 operator== 定义成成员函数,
如 bool operator==(const IntArray &,const IntArray &) 和上面的
bool operator ==(const IntArray &) const 是等价的吗??????
32131532 2007-08-12
  • 打赏
  • 举报
回复
是不是说
定义了个
class IntArray {}

IntArray a ;
\\b赋予一个值
IntArray b(赋予个值);
\\调用了 operator==。

a == b; \\那么 括号里的const 是修饰 b的 ,而括号外的 const 是修饰a 的。

是这样理解吗??????????????????


climtt 2007-08-12
  • 打赏
  • 举报
回复
括号里面的const是指出不能修改参数IntArray&的数据成员,而后面的const是指出不能修改调用operator==()的对象的数据。这两个对象不一样。
32131532 2007-08-12
  • 打赏
  • 举报
回复
那只要括号里的const不就可以了。
dabang_007 2007-08-12
  • 打赏
  • 举报
回复
bool operator==( const IntArray& ) const;
bool operator!=( const IntArray& ) const;
中的 末尾的 const 是什么意思????
--------------------------------------------------
是说明函数运行过程中,类成员变量不可以改变,否则编译通不过
loongsun 2007-08-12
  • 打赏
  • 举报
回复
作用就是不能修改类对象的状态,也就是禁止对类对象的数据成员进行修改!
sky20010109 2007-08-12
  • 打赏
  • 举报
回复
bool operator==( const IntArray& ) const;
bool operator!=( const IntArray& ) const;
中的 末尾的 const 是什么意思????
--------------------------------------------------
是说明函数运行过程中,对operator==()的对象的数据进行定义,不能够修改
自由建客 2007-08-12
  • 打赏
  • 举报
回复
const this
加载更多回复(4)

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧