我们定义的类的成员函数中,常常有一些成员函数不改变类的数据成员,也就是说,这些函数是"只读"函数,而有一些函数要修改类数据成员的值。如果把不改变数据成员的函数都加上const关键字进行标识,显然,可提高程序的可读性。其实,它还能提高程序的可靠性,已定义成const的成员函数,一旦企图修改数据成员的值,则编译器按错误处理。 const成员函数和const对象 实际上,const成员函数还有另外一项作用,即常量对象相关。对于内置的数据类型,我们可以定义它们的常量,用户自定义的类也一样,可以定义它们的常量对象。
1、非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误)
2、表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中, 任意修改它所在的类的成员的操作都是不允许的(因为隐含了对this指针的const引用);
3、唯一的例外是对于mutable修饰的成员。加了const的成员函数可以被非const对象和const对象调用,但不加const的成员函数只能被非const对象调用

char getData() const{
return this->letter;
}

c++ 函数前面和后面 使用const 的作用:

  • 前面使用const 表示返回值为const
  • 后面加 const表示函数不可以修改class的成员

请看这两个函数

const int getValue();

int getValue2() const;

/*
* FunctionConst.h
*/ #ifndef FUNCTIONCONST_H_
#define FUNCTIONCONST_H_ class FunctionConst
{
public:
int value;
FunctionConst();
virtual ~FunctionConst();
const int getValue();
int getValue2() const;
}; #endif /* FUNCTIONCONST_H_ */

源文件中的实现

/*
* FunctionConst.cpp
*/ #include "FunctionConst.h" FunctionConst::FunctionConst():value(100)
{
// TODO Auto-generated constructor stub } FunctionConst::~FunctionConst()
{
// TODO Auto-generated destructor stub
} const int FunctionConst::getValue()
{
return value;//返回值是 const, 使用指针时很有用.
} int FunctionConst::getValue2() const
{
//此函数不能修改class FunctionConst的成员函数 value value = 15;//错误的, 因为函数后面加 const return value;
}

最新文章

  1. JBoss和Tomcat版本、及Servlet、JSP规范版本对应一览 【转】
  2. @requestBody注解的使用
  3. maven auto-config 多环境自动打包
  4. oracle中substr函数的用法
  5. Oracle使用%rowtype变量存储一行数据
  6. "!x++" 我之见解
  7. C# DataGridView添加新行的2个方法
  8. 软键盘 输入法管理器 InputMethodManager
  9. [计算机基础]HTTP协议学习笔记
  10. HierarchyID 数据类型用法
  11. ECharts 高度宽度自适应(转载)
  12. 关于Yuri Boykov and Vladimir Kolmogorov 于2004年提出的max flow / min cut的算法的详解
  13. Rewrite JSON project with Fetch
  14. JS获取元素的宽高以及offsetTop,offsetLeft等的属性值
  15. 关于netcore 发布到服务器的准备
  16. Python入门之安装numpy和pandas
  17. cas Cas20ProxyReceivingTicketValidationFilter
  18. C#.NET常见问题(FAQ)-如何把函数名作为参数传递给另一个函数
  19. 133. Clone Graph (Graph, Map; DFS)
  20. 并发编程>>四种实现方式(三)

热门文章

  1. 目标检测从入门到精通—R-CNN详细解析(二)
  2. ubuntu批量转换所有子文件夹下图片文件格式
  3. ES6 数组扩展(总结)
  4. Linux常用命令入门文件、网络、系统及其他操作命令
  5. Flink Kafka Connector 与 Exactly Once 剖析
  6. 点击手机返回键弹出Dialog对话框功能
  7. PHP面试 PHP基础知识 五(自定义函数和内部函数)
  8. 1.3 React 组件
  9. PAT_A1083#List Grades
  10. socket API CSocket CAsyncSocket 用法及区别