常类型的引入,就是为了既保证数据共享又防止数据被改动。常类型是指使用类型修饰符const说明的类型,常类型的变量或对象成员的值在程序运行期间是不可改动的。
常引用
如果在说明引用时用const修饰,则被说明的引用为常引用。如果用常引用作为形参,便不会产生对实参的不希望的更改。
没有加常引用的时候,我们可以通过引用来修改 a的值
如果我们要修改a的值只能通过a来修改
我们常引用的左右九十,防止使用我们的引用名来修改数据,使用了常引用,我们就不可以通过引用名来修改数据。
常对象
如果在说明对象时用const修饰,则被说明的对象为常对象。常对象的数据成员值在对象的整个生存期内不能被改变。
如果我们把p1声明为常对象,我们就不能访问了。
说明:
在定义常对象时必须进行初始化,而且不能被更新。
C++不允许直接或间接地更改常对象的数据成员。
C++不允许常对象调用普通的成员函数。
常对象成员
常数据成员
类的数据成员可以是常量或常引用,使用const说明的数据成员称为常数据成员。如果在一个类中说明了常数据成员,那么构造函数就只能通过成员初始化列表对该数据成员进行初始化,而其他任何函数都不能对该成员赋值。
当常数据成员和普通数据成员同时存在的时候,我们也只能用成员数据初始化列表来初始化,我们的普通数据成员也可以采用数据初始化列表初始化。
常成员函数
在类中使用关键字const说明的成员函数为常成员函数,常成员函数的说明格式如下:
返回值类型 函数名(参数表) const;
const是函数类型的一个组成部分,因此在声明函数和定义函数时都要采用关键字const。在调用时不必加const。
说明:
1)常成员函数可以访问常数据成员,也可以访问普通数据成员。常数据成员可以被常成员函数访问,也可以被普通成员函数访问。具体见:
2)如果将一个对象说明为常对象,则通过该对象只能调用它的常成员函数,而不能调用普通的成员函数。常成员函数是常对象惟一的对外接口,这是C++从语法体制上对常对象的保护。
3)常成员函数不能更新对象的数据成员,也不能调用该类中普通成员函数,这就保证了在常成员函数中绝不会更新数据成员的值。
错误写法,常成员函数不能更新对象的数据成员。
总结:我们定义的常引用可以防止,利用用于将我们的变量修改了;定义的常对象是在读型的,只能通过常成员函数读取,常成员函数与普通成员函数最大的区别就是,它可以读取常对象。