c++公用数据的保护

来源:互联网 发布:有没有连环画软件 编辑:程序博客网 时间:2024/05/01 17:33

c++虽然采取了不少有效的措施(设private保护)以增加数据的安全性,但是有些数据却往往是共享的,如实参与形参,变量与引用,数据及其指针等,人们可以在不同的场合通过不同的途径访问同一个数据对象。有时在无意之中的误操作会改变有关数据的状况,而这是人们所不希望出现的。既要使得数据能在一定范围内共享,又要保证它不被任意修改,这时可以使用const,即把有关的数据定义为常量。——引自《c++程序设计,谭浩强》

1、常对象(为了防止成员函数修改常对象中数据成员的值)

类名 const   对象名[(实参列表)]    或  const  类名   对象名[(实参列表)]

a. 定义常对象时,必须对数据成员进行赋值,如   const Time t(12,13,35);

b. 常对象不能调用非const型的成员函数(除了由系统自动调用的隐式的构造函数和析构函数);

c. 常对象只有调用const型成员函数才能访问数据成员,但此时仍然不能修改常对象中数据成员的值,如需修改将数据成员声明为mutable;

2、常数据成员

a. 只能通过参数初始化列表对常数据成员进行初始化

3、常成员函数

                                
数据成员非const成员函数const成员函数非const数据成员可以引用,可以改变值可以引用,不可以改变值const数据成员可以引用,不可以改变值可以引用,不可以改变值const对象的数据成员不可以引用,不可以改变值可以引用,不可以改变值

4、指向对象的常指针

类名 * const 指针变量名=对象地址,它在定义时就必须对其初始化, 如Time * const  p=&t;        const在 * 号的右边,值可变,指针所指对象不可变。

p=&tt;   //不合法,指针所指对象不可变4

                (*p).hour=12;  //合法,值可变

5、指向常对象的指针变量

const  类名 * 指针变量名   const在 * 号的左边,值不可变,指针所指对象可变。

char c='a';

const char *p;

p=&c;      //合法,p指针所指对象可以改变

*p=‘b’;   //不合法,*p值不能改变

0 0