关于const
1、const数据成员
类中的const成员要在初始化列表中进行初始化,不能在函数体里初始化:
例:class Clock{
private:
const int hour;
int minute,second;
public:
Clock(int h,int m,int s):hour(h){minute = m;second = s;}
};
2、const函数成员
void Clock()const { ……}
注:常成员函数可以引用const数据成员,也可以引用非const数据成员,只要在常成员函数中不改变数据成员即可。
const数据成员可以被const成员函数引用,也可以被非const的成员函数引用,只要const数据成员不被修改即可。
常成员函数不能调用另一个非常成员函数。
3、常指针
const在中间,地址不可变,内容可以变。
(1)地址值是常量的指针:所指向的量是可以变得,但地址值不可以变。
Eg:char s1[]=”asd”;
Char s2[]=”qew”;
char * const ptr=s1;
Ptr=s2;就非法了
(2)所指向的值是常量:地址值是可以变得,指向的量是不可以变的
const char * ptr=s1;
ptr=s2;任然合法。但ptr=”float不合法
4、const对象
类名 const 对象名(实参列表)或
const 类名 对象名(实参列表)
注:常对象不能调用该对象的非const型的成员函数
5、对象与指针
(1)指向对象的指针
(a)const Circle*p = &c1;
const修饰Circle,对象数据(c1)不可修改,p可以修改,即p可以指向其他对象的地址。
(b)Circle* const p = &c1;
const修饰p,p不可以更改,对象数据允许更改。
(2)函数参数为对象指针
(a)形参是指向const对象的指针【调用函数时对象的值不被修改】
执行过程中不能改变指针变量所指向的对象的值;
实参可以是指向const对象的指针,也可以是非const对象的指针;
不允许通过形参指针访问实参对象的非const函数。
(b)形参是指向非const对象的指针
实参只能用指向非const对象的指针。
(3)函数参数为对象引用【不改变对象,只允许读取】
void f(const Circle&r){……}
不能通过引用对象访问非const成员;
若实参对象为const对象,形参引用必须为const。