既要使数据能在一定范围内共享,又要保证他不被任意修改,这时可以把有关的数据定义为常量。
常对象:
1.定义常对象的形式
类名 const 对象名(实参表)
const 类名 对象名(实参表)
2.常对象只能调用它的常成员函数,这是为了防止调用普通函数时修改常对象中数据成员的值
const Time t1(10,15,36)
t1.get_time;//非法
补充:
如果get_time普通成员函数并未修改常对象的值为什么也不允许呢?
1.因为编译系统会充分考虑可能出现的情况,对不安全因素进行拦截
为什么编译系统不专门检查一下函数的代码,查看是否修改了常对象的值呢?
1.因为实际上函数的定义与声明可能不在同一个源程序文件中,而编译则是以一个源程序文件为单位的,无法检测出两个源程序文件之间是否存在矛盾,如果有错,只有在连接或者运行阶段才会报错
3.在实际需求中有时也会修改常对象的数据成员,即在声明数据成员是在前面加上mutable
常数据成员:
只有通过构造函数的参数初始化列表对常数据成员进行初始化,任何其他函数都不能对常数据成员赋值
常成员函数:
如果将成员函数声明为常成员函数,则只能引用本类中的数据成员,而不能修改它们,例如只能用于输出数据
void get_time()const;
类型名 函数名(参数表)const
const是函数类型的一部分(在声明和定义时都应有const关键字,在调用时不必有const)
1.常对象不能调用普通通成员函数
2.常成员函数不能调用另一个非const成员函数
指向对象的常指针的指针变量:
将指针变量声明为const型,即使其指向位置不变
形式:类名*const 指针变量名
Time t1;
Time* const ptr1=t1;
注意:指向对象的指针不可改变,指向对象的值可以改变
const指针可以指向:1.常变量2.一般变量变量
const指针在指向一般变量期间,变量具有常变量的特性而不是就是常变量
指向对象的指针在形式上有区分:
Time*const p;//指向对象的常指针变量
const Time*p;//常对象的指针变量
规则:
当希望调用函数时对象的值不被修改,就应该把形参定义为为指向常对象的指针变量,同时用对象的地址作实参(对象可以是const或者不是)
对象的常引用:
引用:一个变量的别名,实际上就是引用一个指针变量来存放该变量的地址
总结:在c++面向对象程序设计中,经常用到常指针和常引用,这样既能保证数据安全,在调用函数时又不必建立实参的拷贝
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)