关键字const
用const修饰的东西,初始化后就无法改变,用于保护数据
| 常对象 |
类名 const 对象名[实参表] const 类名 对象名[实参表] |
A const a() const A a() |
| 常成员数据 | const 数据类型 数据名 | const int a |
| 常成员函数 | 类型名 函数名(参数表)const |
int a()const{} pubic int a()const{} |
| 常指针 | 类名 * const 指针名 |
A * cosnt p A * const p=&a; |
| 指向常对象的指针 | const 类型 * 指针名 | const A *p |
构造函数不能用const修饰
参数表只能构造函数使用
常对象必须定义时就初始化,之后就不变了。
常成员数据的初始化只能通过构造函数的参数表进行初始化,如果没有初始化,会报错,初始化后就无法更改
class Box //长方体类
{
//补充2个成员函数使程序可以执行
// 在此处补充你的代码
/**
* 注意:构造函数不能使用const修饰
* const数据成员只能在构造函数的初始化表中初始化
* const成员函数中不允许修改任何数据成员的值,但可以使用他们
* const对象只允许调用const成员函数
*/
public :
Box(int a,int b,int c) :length(a),width(b),height(c){}//使用构造函数的参数初始化表进行常成员数据的初始化
int area()const
{
int a=(length*width+length*height+width*height)*2;//函数自己定义的变量
kk=58;//全局非const变量
return kk;
}
private:
const int length; //长
const int width; //宽
int height; //高
};
常成员函数不能修改任何成员数据的值,但可以直接使用,只是不能用类里面定义的成员数据,类外定义的全局非const变量可以改,函数内自己定义的变量可以改
常指针 保护指针 指向变量后指针存的地址无法更改,指针指向的变量可以改变,无法指向常变量
int a=0; const int a=0;
int *const p=&a; int *const p=&a; //会报错,不能指向常变量
a=9;//变量可以改变
*p=9;//报错,不能通过指针改变变量的值
int b=5;
p=&b;//会报错,不能更改指向
指向常变量的指针,不保护指针,它可以指向非const修饰的变量,防止非const变量被通过指针修改
int a=0; const int a=0;
const int *p=&a; //可以指向变量 const int *p=&a; //可以指向常变量
a=9;//不报错,变量可以改变 a=9;//报错,常变量不能改变
*p=9;//报错,不能通过指针改变变量的值 *p=9;//报错,不能通过指针改变变量的值
int b=5; int b=5;
p=&b;//不会报错,能更改指向 p=&b;//不会报错,能更改指向
无论是常指针还是指向常变量的指针,都不能通过指针改变量的值