C++中共享数据的保护

在C++ 的编程过程中 ,如果既想要数据能自一定范围内被共享 ,又要保证它不被任意修改,可以使用const 也就是把某些有关的数据定义为常量。

 

常对象

定义对象的时候声明为常对象。必须要赋初值。

在所有的场合中,常对象中的成员的值都是不可以修改的。

 

例如  const  Time t1(10,20,30);

 

如果对象被声明了常对象,那么任何企图调应常对象中的函数成员的形式都是违法的,编译器都会报错。因而,要把要把需要调用的函数成员也定义为const

 

如   void  GetTime() const ;

这个定义就可以访问常对象的函数成员了。

例外:当要对常对象中的某个数据进行更改时候,(例如常对象中的计数变量  count )这时候要靠虑到编程的特殊性,所以引入了mutable ,

当常对象的某数据成员声明为   mutable  int count 的时候,说明这个变量是可以改变的。


常对象成员


  常数据成员

    用法类似于一般的常变量,用关键字const来声明,常对象成员的值是不能改变的。只是通过构造函数的参数初始化表对常数据成员进行初始化。定义的具体格式是:Time::Time(int h) :hour(h){}只能通过这样的初始化列表来进行初始化。


   常成员函数

      一般的成员函数只能引用到本类中的非const 成员。也可以修改它们。

       但是如果声明为了常成员函数,那么只能够引用到它们 ,但是却不能 修改它们。

     const 成员函数可以引用包括:const 数据成员 ,非const数据成员和const的对象的数据成员,但是只是引用均不能改变它们的值。

     非const成员函数对                非const数据成员              既可以引用也可以改变值

                    const数据成员      可引用但是不能改变值

                    const对象的数据成员        不可引用

常成员函数的应用:

    

    如果在一个类中 ,有些数据成员的值允许改变,另外一些数据成员的值是不允许改变的,那么可以将一部分的数据成员声明为const 另一部分声明为非const ,

          如果类中的所有的数据成员的值都是不允许改变的。那么可以把数据成员声明为const。

    对于一个常对象 ,常成员函数 只能调用其中的const成员函数,而不能调用非const成员函数。

    常函数成员不能调用任何一个非const函数成员


CSDN实例

Code:
  1.   class Coo    
  2.   {    
  3.    public:   
  4.    Coo() : a(0)   
  5.    {}  

  6.       
  7.       int getA() const //常量成员函数    
  8.       {    
  9.            ++a;     //编译错误    
  10.            return this->a;    
  11.       }  
  12. private:  

  13.     int a;  
  14.   };    

这段代码当然编译不过去。但下面这一段呢?

 

Code:
  1.   class Coo2  
  2.   {    
  3.    public:   

  4.    Coo2() : p(new int(0)) {}  

  5.    ~Coo2() {delete p;}  

  6.       
  7.       int const * getP() const //常量成员函数   
  8.  
  9.       {    

  10.            *p = 1;     //编译OK 
  11.    
  12.            return this->p;    
  13.       }    
  14.    private:  

  15.     int* p;  
  16.   };  
  17.   答案是编译得过去,原因是代码也正确。在语义上,Coo2对象,拥有的是指针,而不是指针所指向的东西

 


posted @ 2010-06-27 15:36  ActionBi  阅读(1235)  评论(0编辑  收藏  举报