常成员函数 —— c++ 函数名后面的const
来源:互联网 发布:时时彩组号软件 编辑:程序博客网 时间:2024/05/17 03:27
使用const关键字进行说明的成员函数,称为常成员函数。只有常成员函数才有资格操作常量或常对象,没有使用const关键字说明的成员函数不能用来操作常对象。常成员函数说明格式如下:
<类型说明符> <函数名> (<参数表>) const;
<类型说明符> <函数名> (<参数表>) const;
其中,const是加在函数说明后面的类型修饰符,它是函数类型的一个组成部分,因此,在函数实现部分也要带const关键字。
class MyClass{public:MyClass(int r1, int r2) { R1=r1; R2=r2; }void print();void print() const;private:int R1, R2;};void MyClass::print() { cout<<"normal print "<<R1<<R2<<endl; }void MyClass::print() const { cout<<"const print "<<R1<<R2<<endl; }void main(){MyClass r_normal(5, 4);r_normal.print();const MyClass r_const(5, 4);r_const.print();}
运行后输出:
normal print 54const print 54也就是说,普通类对象r_normal调用的是普通成员函数void MyClass::print(),而常对象r_const调用的是常成员函数void MyClass::print() const.
不过,普通类对象r_normal也是可以调用常成员函数的,如下代码是可以运行的:
void MyClass::print_const() const { cout<<"const print "<<R1<<R2<<endl; }MyClass r_normal(5, 4);r_normal.print_const();而如果常对象r_const调用普通成员函数却是会编译器报错:
void MyClass::print_normal() { cout<<"normal print "<<R1<<R2<<endl; }const MyClass r_const(5, 4);r_const.print_normal(); //编译器报错 error C2662
error C2662: “MyClass::print_normal”: 不能将“this”指针从“const MyClass”转换为“MyClass &”
总结:const对象必须调用常成员函数(<类型说明符> <函数名> (<参数表>) const;),普通类对象可以调用普通成员函数或者也可以调用常成员函数。
其实const改变了隐含的this形参的类型,使得常成员函数不能修改调用它们的对象(this)
PS:
任何通过常成员函数对成员变量的修改都是不允许的:
inline bool visible() const { return (_flags &= F_VISIBLE) ; }error C3490: 由于正在通过常量对象访问“_flags”,因此无法对其进行修改
- 常成员函数 —— c++ 函数名后面的const
- 成员函数后面的const
- C++:在成员函数后面放const的作用
- 类的成员函数后面加 const
- 成员函数后面加上const的作用
- 成员函数后面加const的含义
- c++ 函数名后面的const
- c++ 函数名后面的const
- 函数名后面加上const的作用
- const 修饰的常函数成员
- 类成员函数后面+const
- C++函数后面跟一个const表示该函数是常成员函数
- 常成员函数:Const类限定的成员函数
- 用conat修饰的类成员——常成员函数、常成员数据、常引用
- 类中成员函数声明后面的const的含义!
- 函数声明时,名后面的const的意思
- 非静态成员函数后面的const作用
- const 只能放在类成员函数的后面
- python_graph-ite
- Oracle 体系结构——值得收藏
- Hadoop 数据排序(一)
- ORACLE序列(字段自增长)
- 2013-11-09 实验之买不到的糖果数目(递推思维+思维逻辑题)
- 常成员函数 —— c++ 函数名后面的const
- Struts2参数的接收 使用DomainObject和ModelDriven
- 判断两个矩形是否相交,相交区域面积
- 判断用户是否具有后台管理权限
- OGNL
- win7清理系统后,音频设备被禁用,没有声音
- 教你如何屏蔽视频广告!浏览器插件实现屏蔽视频广告!
- 机房收费系统—查询并导出Excel表
- gridview中利用隐藏列值实现超链接