2013年10月7日15:14:07
1. 常对象
定义常对象的一般格式为: 类名 const 对象名[(实参表)] (或者const 类名 对象名[(实参表)] )
例如:Time const t1(23, 59, 59);//定义t1是常对象
说明:(1. 常对象的数据成员都是常数据成员;但成员函数不都是常成员函数。
(2. 常对象只能调用常成员函数。
(3. 如果非要修改常对象中的某个数据成员的值,则需要将数据成员声明为mutable,例如mutable int count;
2. 常对象成员:常数据成员和常成员函数
常数据成员
例如在类体中定义常数据成员hour:const int hour;
说明:只能通过构造函数的参数初始化表对常数据成员进行初始化,任何其他函数都不能对其赋值。
例如:Time::Time(int h):hour(h){}
常成员函数
定义一般格式:类型名 函数名(参数表) const
即在常规定义函数的后面加上const即可。
常成员函数,它只能引用本类中的数据成员(可以引用const数据成员,也可以引用非const数据成员),而不能修改它们。比如输出数据等。
3. 指向对象的常指针
格式:类名 * const 指针变量名;
功能:指针的指向不能改变,但可以通过指针修改它指向的内容。
例如:Time t1(10, 15, 15);
Time * const p;
p = &t1;
4. 指向常对象的指针变量
格式:const 类名 * 指针变量名;
功能:可以修改指针变量的指向,但不能通过指针变量来修改它所指向的内容。
另外:一般的
(1. 若一个变量被声明为常变量,则只能用指向常变量的指针指向它,不能用一般的指针指向它。
const char c[] = "boy";
const char *p1;
p1 = c;//OK
char *p2 = c;//ERROR
(2. 指向常变量的指针,可以指向常变量,也可以指向非const的变量;而非const的指针变量,只能指向非const的变量,不能指向常变量。
const char ch[] = "furture";
char ch2[] = "world";
const char *p1;
char *p2;
p1 = ch;//OK
p1 = ch2;//OK
p2 = ch;//ERROR
p2 = ch2;//OK
5. 对象的常引用
如果不希望在函数中修改实参t的值(函数调用实例fun(t);),可以把fun的函数的形参t声明为const类型,即void fun(const Time &t);。
常指针和常引用作为函数参数的好处:这样既能保证数据安全,使数据不被随意修改,而且在调用函数时又不必建立实参的拷贝。