1,常变量:强制约束,告诉编译器该变量是保持不变的;
const int a=30;//初始化后不能再被更改
const修饰指针变量时:
int a=30;int b=2;
const int * pInt=&a;//pInt指向数据为常量不可修改,指针指向可改变如 pInt=&b; a的属性不变,a=10;
(1)只有一个const,如果const位于*左侧,表示指针所指数据是常量,不能通过引用修改该数据;指针本身是变量,可 以指向其他的内存单元。
int * const pInt2=&a;//pInt2=&b;会报错,
(2)只有一个const,如果const位于*右侧,表示指针本身是常量,不能指向其他内存地址;指针所指的数据可以通过解引 用修改。
const int* const pInt3=&b;
(3)两个const,*左右各一个,表示指针和指针所指数据都不能修改。
2,常成员函数:通过该函数只能读取同一类中的数据成员的值,而不能修改它。
(1)常成员函数不能更新对象的数据成员
(2).当一个对象被声明为常对象,则不能通过该对象调用该类中的非const成员函数
class A:
{
int GetInt() const{ return a;}//可以访问,不可修改 a=10;报错,写成员函数时函数体要一致,GetInt()后加const
int GetInt() {return a};//和int GetInt() const可以构成重载函数,
int a;
}
//常对象
const A ac;
cout<<ac.GetInt()<<endl;//调用 int A::GetInt() const函数
3常对象:是指对象的数据成员不能被修改。常对象必须在定义的同时进行初始化,且不能改变。不能通过常对象去调用非const型的普通成员函数,但是可以通过普通对象去调用const函数