常量对象,常量成员函数和常引用
我们可以用const的关键字来定一个常量 那我们定一个对象的时候也可以在前面加const的关键字
那么这个对象在初始化以后,它的值就不会被改变了
看这个例子,这有一个demo位
那我们定一个demo对象object的时候
如果我在前面加了const的关键字 那么这个object一旦初始化完了以后,在后续的程序里面你就
不能去修改它的值了,然后这object就变成一个常量对象。
实际上我们还可以在类的成员函数说明后面加上一个const的关键字
那这样的一个成员函数就成为所谓的常量成员函数
常量成员函数跟普通成员函数有什么区别
在于这个常量成员函数执行期间,它不应该修改
它所作用的对象,所以它前面成员函数中就不能修改成员变量的值
但是这个静态的成员变量是例外,因为静态的成员变量
其实它不属于对象的一部分,它被属于对象的共享
然后这个常量成员函数执行期间也不能调用同类的非常量成员函数
因为这个同类的非常量成员函数在执行期间
有可能修改了它所作用的对象,所以当然你也不能调用
那静态的成员函数是可以在常量成员函数执行期间来调用
因为静态成员函数那一部不会访问非静态成员变量
下面我们通过具体的例子来看一看常量成员
函数和常量对象之间有什么样的关系,在这里我们定义了一个sample类
还有一个成员被量的value,然后在这里面有一个成员函数getvalue
我们在类里面说明它的时候,后面加了一个const关键字所以它就是一个
常量的成员函数。那这边有非常量的成员函数func
还有构造函数 我们把这个getvalue拿到类的外面来写了
他是一个常量的成员函数所以拿到累的外面写的时候也要加上const
然后我们看到在getvalue里面,执行value=0
这样的语句会编译出错的 因为我们说的getvalue它是一个常量成员函数
常量成员函数在执行的过程中是不应该修改他所作用的变量的值
那我们这里调value等于0就修改了它所作用的变量的
对象的成员变量的值,那当然就不行了 包括下面这一条语句调用func也是不行的
因为常量成员函数那一部不能调用 非常量的其他的成员函数
因为非常量的其它成员函数在执行过程中是有可能修改掉它所作用的对象的值。
所以这两条语句的编译都出错 下面我们再看看内函数里面怎么用常量对象,我们在这里第一常量对象o
那下面这条语句o.value等于100,当然这个出错的了因为产量对象它的值是不能被修改的
包括这个o.func也是出错的,因为常量对象上面不能执行非常量成员函数
为什么不能执行?因为非常量成员函数
在执行过程中是有可能修改掉o的值 当然这个程序里面func没这么做,可是编译器不会去分析func到底做了些什么的
它只是看到o是一个常量对象
func它是一个非常量的成员函数,那func是危险的,它执行过程中说不定就会改了o的值所以编译器干脆就报错了
下面一条语句o.getvalue这个就没有问题
因为常量对象上面可以执行常量成员函数
常量成员函数是安全的,因为在常量成员函数中它是不会出现 修改对象的值的真阳的语句的
因此o.getvalue不会修改o的值,所以就没有问题。还有一点一定要注意就是一个类里面 可以有两个成员函数,他们的名字和参数表都一样,但一个是const