一、常对象成员
1.常对象成员的定义
我们前面讲到过的,讲类的数据成员用const来修饰那么我们初始化的时候,直接初始化赋值是不对的,但是可以通过初始化列表来赋值。
前面说的用const修饰的数据成员都是一些基本的数据成员,那么可不可以用const来修饰对象成员呢,答案是可以的我们把这种用const修饰的对象成员称为常对象成员,我们还是用线段的例子。
那么我们初始化的时候就必须用初始化列表来进行初始化:
二、常成员函数
1.常成员函数的定义
我们前面把用const修饰的对象成员称为常对象成员,那么用const修饰的成员函数我们就称为常成员函数!
将上面两个成员函数来定义一下:我们可以看到对于普通的changeX函数我们的定义是正确的,但对于常成员函数我们的定义就是错误的,为什么呢?我们看第二个图,其实我们的成员函数定义的时候是隐含着一个this指针的,当为常成员函数时就是const指针,通过常指针来改变指针指向的数据显然是错误的!
2.常对象与常成员函数
const是可以修饰对象的,即在实例化一个对象的时候用const来修饰,比如。
const Line line(1, 2, 3, 4);
值得注意的是常对象只能调用常成员函数,但是我们得普通对象即可以调用普通成员函数又可以调用常成员函数!
三.常指针和常应用
1.对象指针和对象应用
下图简单的说明了对象指针和对象的引用
2.常指针和常引用
那么我们在使用const来修饰引用和指针时就是常指针和常引用了,但是我们在使用指针和引用的时候要注意,常引用和常指针同样只能调用常成员函数。
下面举一个更复杂的例子:下面我们的const在*右边,即顶层const我们的pCoor指针只能指向coor1不能改变指针指向的内容。那么下面的操作pCoor->getY()是正确的,因为指针指向的类并没有被const修饰是可以调用非常成员函数的。第二个操作改变了指针的指向明显是错误的!第三个操作也是正确的!