C++程序设计(第2版--9.6)---共用数据的保护(与const的结合使用)

来源:互联网 发布:ntfs for mac 10.9.1 编辑:程序博客网 时间:2024/05/22 02:23

2013年10月7日15:14:07

1. 常对象

定义常对象的一般格式为: 类名 const 对象名[(实参表)]      (或者const 类名 对象名[(实参表)] )

例如:Time const t1(23, 59, 59);//定义t1是常对象

说明:(1. 常对象的数据成员都是常数据成员;但成员函数不都是常成员函数。

            (2. 常对象只能调用常成员函数。

            (3. 如果非要修改常对象中的某个数据成员的值,则需要将数据成员声明为mutable,例如mutable int count;

2. 常对象成员:常数据成员和常成员函数

常数据成员

例如在类体中定义常数据成员hour:const int hour;

说明:只能通过构造函数的参数初始化表对常数据成员进行初始化,任何其他函数都不能对其赋值。

例如:Time::Time(int h):hour(h){}


常成员函数

定义一般格式:类型名 函数名(参数表) const                      

即在常规定义函数的后面加上const即可。

常成员函数,它只能引用本类中的数据成员(可以引用const数据成员,也可以引用非const数据成员),而不能修改它们。比如输出数据等。

3. 指向对象的常指针

格式:类名 * const 指针变量名;

功能:指针的指向不能改变,但可以通过指针修改它指向的内容。

例如:Time t1(10, 15, 15);

            Time * const p;

            p = &t1;

4. 指向常对象的指针变量

格式:const 类名 * 指针变量名;

功能:可以修改指针变量的指向,但不能通过指针变量来修改它所指向的内容。

另外:一般的

(1. 若一个变量被声明为常变量,则只能用指向常变量的指针指向它,不能用一般的指针指向它。

const char c[] = "boy";const char *p1;p1 = c;//OKchar *p2 = c;//ERROR

(2. 指向常变量的指针,可以指向常变量,也可以指向非const的变量;而非const的指针变量,只能指向非const的变量,不能指向常变量。

const char ch[] = "furture";char ch2[] = "world";const char *p1;char *p2;p1 = ch;//OKp1 = ch2;//OKp2 = ch;//ERRORp2 = ch2;//OK

5. 对象的常引用

如果不希望在函数中修改实参t的值(函数调用实例fun(t);),可以把fun的函数的形参t声明为const类型,即void fun(const Time &t);。

常指针和常引用作为函数参数的好处:这样既能保证数据安全,使数据不被随意修改,而且在调用函数时又不必建立实参的拷贝。

原创粉丝点击