一、函数实参的保护
函数的形参如果用const修饰,在函数体中该形参为只读变量,不能修改。
C++中大量系统函数的形参均用const进行修饰,如:
int atoi(const char * str);//将数字串转换成整数
char * strcpy(char * to,const char * from);//保护源串from
只读形参用const修饰,一方面保护实参,避免错误,使程序健壮,另一方面增强程序可读性。
二、常对象
- 常对象不能调用任何类的非常成员函数,不能被修改。
- 只有常成员函数可以访问类的常对象,但也不能修改常对象;
- const对象不能被赋值,必须在定义时由构造函数初始化;
- 常对象只能访问常成员函数;
定义:
三、常数据成员
常数据成员的定义与一般常变量的定义方式相同,只是他的定义必须在类体中。
必须进行初始化,通过构造函数的初始化列表进行,不能被修改。
#include<iostream>
using namespace std;
class A
{
private:
const int& r;//常引用数据成员
const int a;//常数据成员
static const int b;//静态常数据成员;类内声明,类外定义
public:
//常数据成员只能通过初始化列表获得初值
A(int i):a(i),r(a)
{
cout<<"constructor"<<endl;
}
void display()
{
cout<<a<<","<<b<<","<<r<<endl;
}
};
const int A::b=3;
int main()
{
A a1(1);
a1.display();
A a2(2);
a2.display();
return 0;
}
四、常成员函数
用于访问类的常对象的函数为常成员函数,也可以访问一般对象,定义格式:
- 常成员函数的实现也要带有const关键字
- 不能更新对象的数据成员