为什么要把类对象定义成const,即定义成const类对象?
也许是为了保持严谨?虽然我认为一个类对象定义成常量与否问题不大。可能是配合const成员函数一同服用吧。
const成员函数又是怎么一回事?
当我们有一个类:
class Sales_data
{
string isbn() const {return bookNo;}
string bookNo;
};
Sales_data total;
当调用total.isbn(); 时,成员函数会通过一个名为this的隐式指针来访问调用
也就是将this指针指向对象:类似于: Sales_data *const this=&total;
也就是说this指针是一个常量指针。
但是随之而来有个问题,如果我们定义的类对象是一个const类对象呢?那this指针无法指向const对象了,也就使得不能在一个常量对象上调用类成员函数了。
要如何解决这个问题呢?
引入const类成员函数,也就是上面定义的isbn()函数。const类成员函数使得this指针变成了:const Sales_data *const this; 这就将const类对象无法调用类成员函数的问题完美解决了。
同时,因为this是指向常量的指针,所以常量成员函数不能改变调用他的对象的内容。
作为一种良好的编程风格,当一个类成员函数不修改类成员变量的值时,我们通常将他设置为const。
常量指针?
常量指针指的是,一个指针它本身就是常量,定义方式类似于:
int *const ptr=num;
指向常量的指针?
指向常量的指针,意思是,这个指针指向的是常量,定义方式类似于:
const int *ptr;
指向常量的常量指针?
指向常量的常量指针,就是上面两种的合体,即指向的是常量,且指针本身也是常量,定义方式类似于:
const int num=100;
const int *const ptr=num;
|