http://blog.csdn.net/wangshihui512/article/details/9823739

我们定义的类的成员函数中,常常有一些成员函数不改变类的数据成员,也就是说,这些函数是"只读"函数,而有一些函数要修改类数据成员的值。如果把不改变数据成员的函数都加上const关键字进行标识,显然,可提高程序的可读性。其实,它还能提高程序的可靠性,已定义成const的成员函数,一旦企图修改数据成员的值,则编译器按错误处理。 
const成员函数和const对象 
实际上,const成员函数还有另外一项作用,即常量对象相关。对于内置的数据类型,我们可以定义它们的常量,用户自定义的类也一样,可以定义它们的常量对象。例如,定义一个整型常量的方法为: 
const int i=1 ; 
同样,也可以定义常量对象,假定有一个类classA,定义该类的常量对象的方法为: 
const classA a(2); 
这里,a是类classA的一个const对象,"2"传给它的构造函数参数。const对象的数据成员在对象寿命期内不能改变。但是,如何保证该类的数据成员不被改变呢? 
为了确保const对象的数据成员不会被改变,在C++中,const对象只能调用const成员函数。如果一个成员函数实际上没有对数据成员作任何形式的修改,但是它没有被const关键字限定的,也不能被常量对象调用。下面通过一个例子来说明这个问题:

[cpp] view plaincopy print?
  1. class C
  2. {
  3. int X;
  4. public:
  5. int GetX()
  6. {
  7. return X;
  8. }
  9. void SetX(int X)
  10. {
  11. this->X = X;
  12. }
  13. };
  14. int main()
  15. {
  16. const C constC;
  17. cout<<constC.GetX();
  18. }
  19. class C
  20. {
  21. int X;
  22. public:
  23. int GetX()
  24. {
  25. return X;
  26. }
  27. void SetX(int X)
  28. {
  29. this->X = X;
  30. }
  31. };
  32. int main()
  33. {
  34. const C constC;
  35. cout<<constC.GetX();
  36. }

如果我们编译上面的程序代码,编译器会出现错误提示:constC是个常量对象,它只能调用const成员函数。虽然GetX( )函数实际上并没有改变数据成员X,由于没有const关键字限定,所以仍旧不能被constC对象调用。如果我们将上述加粗的代码: 
int GetX() 
改写成: 
int GetX()const 
再重新编译,就没有问题了。 
const成员函数的使用 
const成员函数表示该成员函数只能读类数据成员,而不能修改类成员数据。定义const成员函数时,把const关键字放在函数的参数表和函数体之间。下面是定义const成员函数的一个实例: 
class X 

    int i; 
    public: 
    int f() const; 
}; 
关键字const必须用同样的方式重复出现在函数实现里,否则编译器会把它看成一个不同的函数: 
int X::f() const 

    return i; 

如果f( )试图用任何方式改变i或调用另一个非const成员函数,编译器将给出错误信息。任何不修改成员数据的函数都应该声明为const函数,这样有助于提高程序的可读性和可靠性。

C++ 类的const成员函数相关推荐

  1. 成员函数对象类的const和非const成员函数的重载

    首先声明,我是一个菜鸟.一下文章中出现技术误导情况盖不负责 1. 类的const成员函数与非const成员函数的载重 #include <iostream> #include <st ...

  2. const成员函数、const类对象、mutable数据成员

    1. const成员函数 只是告诉编译器,表明不修改类对象. 但是并不能阻止程序员可能做到的所有修改动作,比如对指针的修改,编译器可能无法检测到 2. 类体外定义的const成员函数,在定义和声明处都 ...

  3. C++ 类的知识 | 构造函数再探、匿名对象、友元函数、内部类、类的const成员、类的static成员

    文章目录 构造函数再探 以下代码共调用多少次拷贝构造函数 委托构造函数 概念 形式 匿名对象 友元 友元的声明 友元类 令成员函数作为友元 函数重载和友元 注意 内部类 特性 类的const成员 可变 ...

  4. C++之const类成员变量,const成员函数

    const修饰类的成员函数 const修饰变量一般有两种方式:const T *a,或者 T const *a,这两者都是一样的,主要看const位于*的左边还是右边,这里不再赘述,主要来看一下当co ...

  5. 【C++】类和对象【中篇】--C++六个默认成员函数以及const成员函数

    文章目录 一.类的6个默认成员函数 二.构造函数 1.概念 2.特性 2.1特征分析--自动生成 2.2.特征分析--选择处理 2.3特征分析--默认构造 3.C++11补丁--缺省值 三.析构函数 ...

  6. 类与对象:类的6个默认成员函数: 构造函数、析构函数、拷贝构造函数、赋值操作符重载、默认拷贝构造与赋值运算符重载的问题、const成员函数、 取地址及const取地址操作符重载

    1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类.任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数. 构造函数 析构函数 拷贝构造函数 赋值操作符重载 const成员函数 ...

  7. C++中的const成员函数介绍

     List { 02 private: 03      Node * p_head; 04      int length; 05      -- 06 Public: 07      int Get ...

  8. C++知识点11——this指针,const成员函数,访问权限控制

    1.this指针 每个类都有this指针,this指针指向this指针指向的是类的对象本身 class A { public:A() {}~A() {}void func() {cout<< ...

  9. Item 16: 让const成员函数做到线程安全

    本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 如果我们在数学领域里工作,我们可能会发现用一个类来表示多项式会很方 ...

最新文章

  1. Linux 内核代码行数达到 2700 万行量级
  2. java $ 用法_Java的Volatile实例用法及讲解
  3. 什么是云服务举例说明_云服务是什么功能
  4. SAP CRM customer classfication debug
  5. java api class_Java API:Object class
  6. 华为Mate40系列后置摄像头模组曝光:三款机型各有不同
  7. POJ 1125 Stockbroker Grapevine
  8. nekohtml的简单使用
  9. linux常用快捷键大全
  10. vivado综合阶段部分IP报错--需要安装y2k22补丁包
  11. 微信小程序之九宫格布局方案
  12. 黑色曼陀罗的宿命,无尽的结束,留下伤痛与悲残
  13. char **argv什么意思呢
  14. 蓝桥杯之单片机设计与开发(18)——模数转换A/D与数模转换D/A
  15. f开头的流媒体软件_流媒体直播工具(Streamon)
  16. [译]数据包在 Kubernetes 中的一生(2)
  17. Mysql隔离级别、锁及死锁
  18. 如何利用边缘计算,实现低延时、高质量的互动课堂体验?
  19. Cisco AP-如何识别思科胖瘦AP
  20. 计算机服务器 芯片,服务器芯片是什么意思?服务器芯片有什么用

热门文章

  1. AtCoder Beginner Contest 084(AB)
  2. 通过ifrmae异步下载文档
  3. 数据值、列类型和数据字段属性
  4. Spring MVC Controller与jquery ajax请求处理json
  5. 在熟练使用2B铅笔前,请不要打开Axure
  6. Eclipse C/C++开发环境搭建
  7. python中自定义模块导入飘红_hadoop streaming 中跑python程序,自定义模块的导入
  8. python基础学习_35岁零基础学习Python编程是否能学得会并用得上
  9. 服务器旧图片维护,图片服务器
  10. 实现编辑功能有哪几个action_Web 应用的撤销重做实现