每日一笔记之1:静态成员函数
2015-10-30 17:30
302 查看
对于类的成员函数而言,非静态成员函数属于类的具体对象,而静态成员函数属于该类,对于该类的所有对象是公有的。静态成员函数的调用不需要创建该类的对象。而非静态成员函数的调用必须先建立该类。
常成员函数:
int GetX() const; //声明常成员函数
常成员函数含义是通过该函数只能读取同一类中的数据成员的值,而不能修改它。
1.常成员函数不能更新对象的数据成员
2.当一个对象被声明为常对象,则不能通过该对象调用该类中的非const成员函数
3.非常量成员函数不能被常量成员对象调用,因为它可能企图修改常量的数据成员:但构造函数和析构函数对这个规则例外,它们从不定义为常量成员,但可被常量对象调用(被自动调用)。它们也能给常量的数据成员赋值,除非数据成员本身是常量。
const成员函数和const对象
实际上,const成员函数还有另外一项作用,即常量对象相关。对于内置的数据类型,我们可以定义它们的常量,用户自定义的类也一样,可以定义它们的常量对象。例如,定义一个整型常量的方法为:
const int i=1 ;
同样,也可以定义常量对象,假定有一个类classA,定义该类的常量对象的方法为:
const classA a(2);
这里,a是类classA的一个const对象,"2"传给它的构造函数参数。const对象的数据成员在对象生存期内不能改变。但是,如何保证该类的数据成员不被改变呢?
为了确保const对象的数据成员不会被改变,在C++中,const对象只能调用const成员函数。如果一个成员函数实际上没有对数据成员作任何形式的修改,但是它没有被const关键字限定的,也不能被常量对象调用。
常成员函数:
int GetX() const; //声明常成员函数
常成员函数含义是通过该函数只能读取同一类中的数据成员的值,而不能修改它。
1.常成员函数不能更新对象的数据成员
2.当一个对象被声明为常对象,则不能通过该对象调用该类中的非const成员函数
3.非常量成员函数不能被常量成员对象调用,因为它可能企图修改常量的数据成员:但构造函数和析构函数对这个规则例外,它们从不定义为常量成员,但可被常量对象调用(被自动调用)。它们也能给常量的数据成员赋值,除非数据成员本身是常量。
const成员函数和const对象
实际上,const成员函数还有另外一项作用,即常量对象相关。对于内置的数据类型,我们可以定义它们的常量,用户自定义的类也一样,可以定义它们的常量对象。例如,定义一个整型常量的方法为:
const int i=1 ;
同样,也可以定义常量对象,假定有一个类classA,定义该类的常量对象的方法为:
const classA a(2);
这里,a是类classA的一个const对象,"2"传给它的构造函数参数。const对象的数据成员在对象生存期内不能改变。但是,如何保证该类的数据成员不被改变呢?
为了确保const对象的数据成员不会被改变,在C++中,const对象只能调用const成员函数。如果一个成员函数实际上没有对数据成员作任何形式的修改,但是它没有被const关键字限定的,也不能被常量对象调用。
相关文章推荐
- Retrofit 2.0: 最好的Android HTTP客户端库的一次重大改变
- SELinux安全上下文的认识
- OpenJudge4079:二叉搜索树
- Redis学习总结(2)——Java使用Redis
- Redis学习总结(2)——Java使用Redis
- 二分图最大匹配的König定理及其证明
- #define _syscall0(type,name) 详解
- AndroidTestCase来进行android 单元测试简介
- Java 使用 Redis
- Java中传值与传递引用的区分
- Android自定义View的实现方法(四)
- 强类型语言JAVA与弱类型语言JS的小小认识
- Ajax调用WebService(一)
- 一个好用的上传图片插件
- 解决:android:editable is deprecated: Use an <EditText> to make it editable
- 配置Maven基础环境生成eclipse工程以及常用命令
- 使用DECODE解决去字段中固定首字的匹配问题
- C++primer学习:面向对象程序设计(5):再探文本查询程序
- iOS动画效果、绘制图形
- 个人博客起航