一个函数名后面加const表示什么意思??

Ray2002 2002-02-21 07:04:04

double aaa(double bb) const
{return bb}
...全文
32388 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
gates11 2002-02-22
  • 打赏
  • 举报
回复
很简单,常量函数表示此函数只能在内存中存在一个,不能重载。
masterjames 2002-02-22
  • 打赏
  • 举报
回复
const表示函数不能修改对象数据成员!

hezh 2002-02-22
  • 打赏
  • 举报
回复
如果函数后面加了const表示函数不能修改对象数据成员!
dragondwy 2002-02-22
  • 打赏
  • 举报
回复
任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。
以下程序中,类stack的成员函数GetCount仅用于计数,从逻辑上讲GetCount应当为const函数。编译器将指出GetCount函数中的错误。
class Stack
{
public:
void Push(int elem);
int Pop(void);
int GetCount(void) const; // const成员函数
private:
int m_num;
int m_data[100];
};

int Stack::GetCount(void) const
{
++ m_num; // 编译错误,企图修改数据成员m_num
Pop(); // 编译错误,企图调用非const函数
return m_num;
}
const成员函数的声明看起来怪怪的:const关键字只能放在函数声明的尾部,大概是因为其它地方都已经被占用了。
meta201 2002-02-22
  • 打赏
  • 举报
回复 1
补充:
1。const 只能声名 member function
2。const member function 不能修改对象的任意成员
3。const member function 不能调用非 const member function
zh_haocool 2002-02-21
  • 打赏
  • 举报
回复
const用在成员函数后 主要是针对类的const 对象
如:
class Text{
public:
void printconst(void)const{cout<<"hello"<<endl;}
void print(void){cout<<"hello"<<endl;}
private:
int k;
};
const Text a;
//上面定义了类Text的一常量对象
int main(void)
{
a.printconst(); //ok
a.print(); //error
//上面a.print()调用是非法的
return 0;
}
const对象只能调用const成员函数。
const对象的值不能被修改,在const成员函数中修改const对象数据成员的值是语法错误
在const函数中调用非const成员函数是语法错误
以上浅见,望能对你有所帮助
zjlsct 2002-02-21
  • 打赏
  • 举报
回复
若改变了变量的值,编译器就会报错
kimryo 2002-02-21
  • 打赏
  • 举报
回复
confused...
zheng_can 2002-02-21
  • 打赏
  • 举报
回复
楼上说得都好
建议去找本书来啃一啃,一定大有裨益
langhaixin 2002-02-21
  • 打赏
  • 举报
回复
同意
virtual double area()const{return 0.0}
该函数不会修改他虽调用的class object的成员

int sum (const shape &shape1)
{
shape1.memberFunc1;
return 1;
}
由shape1是个const refernce参数 所以sum()是不会改变shape1的值的
但sum()不会保证shape的member functions不会改变shape的值
所以才有了
virtual double area()const{return 0.0}
这样的定义
  • 打赏
  • 举报
回复
好像意思是除了函数中定义的临时变量外,不可以改变其他变量的值。
jzk_sherlock 2002-02-21
  • 打赏
  • 举报
回复
const函数的声明和定义都必须使用关键字const。在声明const函数时,关键字const插在函数参数列表之后;在定义const函数时,关键字const必须插在表示函数体开始的左花括号之前。
这里引出了一个有趣的问题:构造函数和折构函数肯定是要修改对象的。实际上,const对象的构造函数和析构函数无需用关键字const声明。为了能够正确地初始化对象,构造函数必须允许修改对象。析构函数也必须要能够做一些撤销对象前的清理工作。
最好把const对象所要使用的所有成员函数都声明成const

ice119103 2002-02-21
  • 打赏
  • 举报
回复
说明函数只是常数,不能改变,不知道对不对?
duqiang2050 2002-02-21
  • 打赏
  • 举报
回复
同意楼上,
是不改变对象的 non-static member
zosatapo 2002-02-21
  • 打赏
  • 举报
回复
表明此函数不能影响对象的状态,说白一点就是
不会改变对象中成员变量的数值。
snipersu 2002-02-21
  • 打赏
  • 举报
回复
如果成员函数有const能当改变成员变量的值而改变了对象时编译器能显示错误

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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