c++中const基本用法(常变量、常指针、常对象)

   一:常变量       

          在定义变量时,如果加上关键字const,则变量的值在运行期间不能改变,这种变量就称为常变量(constant  variable),又称只读变量,在定义常变量时必须同时对它进行初始化(即指定其值)此后它的值不能再改变。

          eg: const int a = 2;   

          eg: 可以用表达式对常变量进行初始化:

                 const int b = 3 + 2 ;

                 const int c = 3 * cos(1.5) ;     // 使用了系统标准数学函数,必须加上包含该函数有关信息的头文件:# include<cmath> 或 #include<math.h>


         注:区别用#define命令定义的符号常量和用const定义的常变量

             符号常量只是用一个符号代表一个字符串,在预编译时把所有的符号常量替换为所制定的字符串,它没有类型,在内存中并不存在以符号常量命名的存储单元。

             常变量具有变量的特征,它具有类型,在内存中存在着以它命名的存储单元,可以用sizeof()运算符测出其长度。与一般变量唯一不同的是指定变量的值不可以改变。


  二: 常指针:

          将指针变量声明为const型,并使之初始化,这样指针值始终保持为其初值,不能改变,即其指向始终不变。

        定义指向对象的常指针的一般形式:

        类名 * const 指针变量名 = 对象地址

         eg : Time t1(10, 11, 12);

                  Time * const  p = &t1;

        注:指向对象的常指针变量的值不能改变,即始终指向同一个对象,但可以改变其所指向对象中数据成员的值。


  三:常对象:

       在定义对象的时候指定对象为常对象,常对象中的数据成员为常变量且必须要有初值。

           类名 const  对象名(实参表列);

           或:

          const  类名 对象名 ( 实参表列);

            eg : Time const  t1(10, 20, 30) ;

         注意:在所有的场合里,对象t1中左右的数据成员的值不允许被修改。

                      如果一个对象被声明为常对象,则不能调用该对象的非const型的成员函数(除了有系统自动调用的隐式的构造函数和析构函数)

四:指向常对象的指针变量 

      定义指向常变量的指针变量的一般形式为:

             const  类型名  *指针变量名 ;

        (1)、如果一个对象已经被声明为常对象,只能用指向常对象的指针变量指向它,而不能用一般的(指向非const型对象的)指针变量去指向他。

        (2)、如果定义了一个指向常对象的指针变量,并使它指向一个非const的对象,则其指向的对象是不能通过之阵来改变的;

        (3)、指向常对象的指针最常用于函数的形参,目的是在保护形参指针所指向的对象,使它在函数的执行过程中不被改变;            

             Time * const p;            // 指向对象的常指针变量

             const Time *p;             // 指向常对象的指针变量

小结:

            Time const  t1;(或  const Time t1)          // t1是常对象,其值在任何情况下都不能改变;

            void Time :: fun() const ;                       // fun是Time类的常成员函数,可以引用,但不能修改本类中的数据成员;

            Time  *  const  p;                                 // p是指向Time对象的常指针,p的值(即p的指向)不能改变;

            const  Time  *p;                                   // p是指向Time类常对象的指针,其指向的类对象的值不能通过指针来改变;

            Time  &t1 = t;                                     //  t1是Time类对象t的引用,t和t1指向同一段内存空间;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值