C++ 类的const成员函数
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关键字限定的,也不能被常量对象调用。下面通过一个例子来说明这个问题:
- class C
- {
- int X;
- public:
- int GetX()
- {
- return X;
- }
- void SetX(int X)
- {
- this->X = X;
- }
- };
- int main()
- {
- const C constC;
- cout<<constC.GetX();
- }
- class C
- {
- int X;
- public:
- int GetX()
- {
- return X;
- }
- void SetX(int X)
- {
- this->X = X;
- }
- };
- int main()
- {
- const C constC;
- cout<<constC.GetX();
- }
如果我们编译上面的程序代码,编译器会出现错误提示: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成员函数相关推荐
- 成员函数对象类的const和非const成员函数的重载
首先声明,我是一个菜鸟.一下文章中出现技术误导情况盖不负责 1. 类的const成员函数与非const成员函数的载重 #include <iostream> #include <st ...
- const成员函数、const类对象、mutable数据成员
1. const成员函数 只是告诉编译器,表明不修改类对象. 但是并不能阻止程序员可能做到的所有修改动作,比如对指针的修改,编译器可能无法检测到 2. 类体外定义的const成员函数,在定义和声明处都 ...
- C++ 类的知识 | 构造函数再探、匿名对象、友元函数、内部类、类的const成员、类的static成员
文章目录 构造函数再探 以下代码共调用多少次拷贝构造函数 委托构造函数 概念 形式 匿名对象 友元 友元的声明 友元类 令成员函数作为友元 函数重载和友元 注意 内部类 特性 类的const成员 可变 ...
- C++之const类成员变量,const成员函数
const修饰类的成员函数 const修饰变量一般有两种方式:const T *a,或者 T const *a,这两者都是一样的,主要看const位于*的左边还是右边,这里不再赘述,主要来看一下当co ...
- 【C++】类和对象【中篇】--C++六个默认成员函数以及const成员函数
文章目录 一.类的6个默认成员函数 二.构造函数 1.概念 2.特性 2.1特征分析--自动生成 2.2.特征分析--选择处理 2.3特征分析--默认构造 3.C++11补丁--缺省值 三.析构函数 ...
- 类与对象:类的6个默认成员函数: 构造函数、析构函数、拷贝构造函数、赋值操作符重载、默认拷贝构造与赋值运算符重载的问题、const成员函数、 取地址及const取地址操作符重载
1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类.任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数. 构造函数 析构函数 拷贝构造函数 赋值操作符重载 const成员函数 ...
- C++中的const成员函数介绍
List { 02 private: 03 Node * p_head; 04 int length; 05 -- 06 Public: 07 int Get ...
- C++知识点11——this指针,const成员函数,访问权限控制
1.this指针 每个类都有this指针,this指针指向this指针指向的是类的对象本身 class A { public:A() {}~A() {}void func() {cout<< ...
- Item 16: 让const成员函数做到线程安全
本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 如果我们在数学领域里工作,我们可能会发现用一个类来表示多项式会很方 ...
最新文章
- Linux 内核代码行数达到 2700 万行量级
- java $ 用法_Java的Volatile实例用法及讲解
- 什么是云服务举例说明_云服务是什么功能
- SAP CRM customer classfication debug
- java api class_Java API:Object class
- 华为Mate40系列后置摄像头模组曝光:三款机型各有不同
- POJ 1125 Stockbroker Grapevine
- nekohtml的简单使用
- linux常用快捷键大全
- vivado综合阶段部分IP报错--需要安装y2k22补丁包
- 微信小程序之九宫格布局方案
- 黑色曼陀罗的宿命,无尽的结束,留下伤痛与悲残
- char **argv什么意思呢
- 蓝桥杯之单片机设计与开发(18)——模数转换A/D与数模转换D/A
- f开头的流媒体软件_流媒体直播工具(Streamon)
- [译]数据包在 Kubernetes 中的一生(2)
- Mysql隔离级别、锁及死锁
- 如何利用边缘计算,实现低延时、高质量的互动课堂体验?
- Cisco AP-如何识别思科胖瘦AP
- 计算机服务器 芯片,服务器芯片是什么意思?服务器芯片有什么用
热门文章
- AtCoder Beginner Contest 084(AB)
- 通过ifrmae异步下载文档
- 数据值、列类型和数据字段属性
- Spring MVC Controller与jquery ajax请求处理json
- 在熟练使用2B铅笔前,请不要打开Axure
- Eclipse C/C++开发环境搭建
- python中自定义模块导入飘红_hadoop streaming 中跑python程序,自定义模块的导入
- python基础学习_35岁零基础学习Python编程是否能学得会并用得上
- 服务器旧图片维护,图片服务器
- 实现编辑功能有哪几个action_Web 应用的撤销重做实现