const类型成员函数与mutable
const类型成员函数与mutable
原文:http://houhualiang.i.sohu.com/blog/view/42619368.htm
const类型的成员函数是指使用const关键字进行修饰的类的成员函数。const类型的成员函数对函数内部的操作加以一定的限制,比如不可以对对象的属性进行修改等,这样可以提高程序代码的正确性。 在使用关键字const对成员函数修饰的时候,将const放在成员函数的后面。在定义对象的时候,可以使用关键字const声明对象为常量对象。对于常量对象,如果使用非常量成员函数来操作,则会出现一个编译错误;同样,对于使用关键字volatile声明的对象, 如果使用非volatile类型的成员函数来操作,也会出现一个编译错误。 如果想修改const类型对象的成员变量,可以使用关键字mutable对该成员变量进行修饰。 1 #include <iostream.h> 2 #include <conio.h> 3 class CDate 4 { 5 public: 6 int year; 7 mutable int month; // 使用关键字mutable进行修饰 8 CDate(int y=2000,int m=1) 9 { 10 year= y; 11 month= m; 12 }; 13 int GetMonth() const; // 一个只读函数 14 void SetMonth( int m ); // 一个写函数 15 }; 16 int CDate::GetMonth() const 17 { 18 // 下面一行错误,故屏蔽掉 19 // year++; // 但如果是month+ + ;则没问题 20 return month; // 在只读函数中不可以进行改写操作 21 } 22 void CDate::SetMonth(int m) 23 { 24 month = m; // 设置月份 25 } 26 void main() 27 { 28 CDate d1; 29 d1.Setmonth(9); 30 d1.year=1975 ; 31 cout<<"d1:"<<d1.year<<"年"<<d1.Getmonth()<<"月\n"; 32 const CDate d2; 33 d2.month=7; 34 cout<<"d2:"<<d2.year<<"年"<<d2.Getmonth()<<"月\n"; 35 // 下面一句错误,故屏蔽掉 36 // d2.SetMonth(7); // 不可以对常量对象调用非常量成员函数 37 // 下面一句错误,故屏蔽掉 38 // d2.year=1973; // 不可以修改常量对象的成员变量 39 } 运行结果: |