首页 > 代码库 > const总结
const总结
1.常对象
类名 const 对象名[实参表列];
const 类名 对象名[实参表列];
对象被声明为常对象,则不能调用该对象的非const型的成员函数;
常成员函数可以访问常对象中的数据成员,但是不允许修改你常对象中的数据成员的值。
如果一个对象被声明为常对象,只能用指向常对象的指针指向它,而不能用一般的(指向非const型变量的)指针变量去指向它;
2.常对象成员
1> 常数据成员
只能通过构造函数的参数初始化表对常数据成员进行初始化。在类体中声明了某一个常数据成员后,该类所有对象中的该数据成员的值都是不能改变的,但是不同对象中的该数据成员的值可以是不同的。
2> 常成员函数
常成员函数可以访问常对象中的数据成员,但是不允许修改你常对象中的数据成员的值。常成员函数可以引用const数据成员,也可以是非const的数据成员。
常成员函数不能调用另一个非const成员函数。
3.指向对象的常指针
类名 * const 指针变量名 = 对象地址;
定义的时候就需要初始化,这样的指针始终保持为初值,不能改变,即指向始终不变。但是可以修改所指向对象中数据成员的值。常用做形参,目的是不允许函数执行过程中改变指针变量的值。
4.指向常对象的指针变量
const 类名 *指针变量;
变量声明为常变量,只能用指向常变量的指针变量指向它,而不能用一般的(指向非const型变量的)指针变量去指向它;
const char c[] = "boy"; //定义const的数组
const char *p; //定义p 为指向const型的char变量的指针变量。
p = c; //合法p指向常变量。
char *p2 = c; //非法,p2不是指向常变量的指针变量。
指向常变量的指针变量除了可以指向常变量外,还可以指向未被声明为const的变量,但是不能通过此指针变量修改该变量的值。
char c = ‘a‘;
const char *p; //定义p 为指向const型的char变量的指针变量
p = &c; //p指向非const的变量c
*p = ‘b‘; //非法,不能通过p修改变量c的值。
如果定义了一个指向常对象的指针变量,并使它指向一个非const的对象,则指向的对象是不能通过指针来修改。
形参 | 实参 | 合法否 | 改变指针所指的变量的值 |
指向非const型的指针 | 指向非const型的指针 | 合法 | 可以 |
指向非const型的指针 | 指向const型的指针 | 非法 | / |
指向const型的指针 | 指向非const型的指针 | 合法 | 不可以 |
指向const型的指针 | 指向const型的指针 | 合法 | 不可以 |
可以看出:指向常变量的指针变量可以指向const跟非const的变量,而指向非const的变量的指针变量指针指向非const的变量。
总结
形式 | 含义 |
Time const t;或const Time t ; | t 是常对象,其值在任何情况下都不能改变 |
void Time::fun() const | fun是Time类的常成员函数,可以引用但不能修改本类中数据成员 |
Time * const p; | p是Time类对象的常指针,p的值(即p的指向)是不能改变的 |
const Time *p; | p是指向Time类对象的指针变量,其所指向的类对象不能通过p来修改 |
Time &t1 = t; | t1 是Tme类对象t的引用,t和t1指向同一段内存空间 |
const总结