非淡泊无以明志,非宁静无以致远
全部博文(408)
分类: C/C++
2009-11-26 22:23:34
一.常对象:
1.定义常对象的一般形式为
类名 const 对象名[(实参表列)];
也可以把const写在最左面:
const 类名 对象名[(实参表列)];
二者等价。
2. 编译系统只检查函数的声明,只要发现调用了常对象的成员函数,而且该函数未被声明为const,就报错,
3. 常成员函数可以访问常对象中的数据成员,但仍然不允许修改常对象中数据成员的值。
4. 可以将对象的成员声明为const,包括常数据成员和常成员函数。
5. 常数据成员的值是不能改变的。有一点要注意: 只能通过构造函数的参数初始化表对常数据成员进行初始化。不能采用在构造函数中对常数据成员赋初值的方法。
6. 一般的成员函数可以引用本类中的非const数据成员,也可以修改它们。如果将成员函数声明为常成员函数,则只能引用本类中的数据成员,而不能修改它们,例如只用于输出数据等。如 void get_time( ) const; //注意const的位置在函数名和括号之后
7. 如果已定义了一个常对象,只能调用其中的const成员函数,而不能调用非const成员函数,不要误认为常对象中的成员函数都是常成员函数.
二. 指向对象的常指针
1. 将指针变量声明为const型,这样指针值始终保持为其初值,不能改变。
定义指向对象的常指针的一般形式为
类名 * const 指针变量名;
2. 指向对象的常指针变量的值不能改变,即始终指向同一个对象,但可以改变其所指向对象(如t1)的值。
三. 指向常对象的指针变量
1. 指向常变量的指针变量可以指向const和非const型的变量,而指向非const型变量的指针变量只能指向非const的变量。
2. 如果一个对象已被声明为常对象,只能用指向常对象的指针变量指向它,而不能用一般的(指向非const型对象的)指针变量去指向它。
3. 请记住这样一条规则: 当希望在调用函数时对象的值不被修改,就应当把形参定义为指向常对象的指针变量,同时用对象的地址作实参(对象可以是const或非const型)。如果要求该对象不仅在调用函数过程中不被改变,而且要求它在程序执行过程中都不改变,则应把它定义为const型。
4. 在C++面向对象程序设计中,经常用常指针和常引用作函数参数。这样既能保证数据安全,使数据不能被随意修改,在调用函数时又不必建立实参的拷贝。用常指针和常引用作函数参数,可以提高程序运行效率。
5.const型数据成员小结:
形式 |
含义 |
Time const t1; |
t1是常对象,其值在任何情况下都不能改变 |
void Time∷fun( )const |
fun是Time类中的常成员函数,可以引用,但不能修改本类中的数据成员 |
Time * const p; |
p是指向Time对象的常指针,p的值(即p的指向)不能改变 |
const Time *p; |
p是指向Time类常对象的指针,其指向的类对象的值不能通过指针来改变 |
Time &t1=t; |
t1是Time类对象t的引用,二者指向同一段内存空间 |