111

const修飾的定義對象成爲常對象;(兩種聲明方式)函數

1 const Point point1( 10,10);//常量對象
2 Point const point2( 10,10);//常量對象

 

 

const修飾的聲明成員函數成爲常成員函數;spa

 

1 class Point{   
2 int x, y;  
3 public:   
4 Point(int a, int b) { x=a; y=b;}   
5 void MovePoint( int a, int b){ x+=a; y+=b;}   
6 void print() const { cout<<"x="<<x<<"y="<<y<<endl;}
7 };

 

const修飾的聲明數據成員成爲常數據成員;code

注意:變量或對象被const修飾後其值不能被更新(除非數據成員被mutable修飾時,能夠被修改)。所以被const修飾的變量或者對象要進行初始化。對象

說明:blog

   1 任何函數都不能對常數據成員賦值。table

    2 構造函數對常數據成員進行初始化時也只能經過初始化列表進行。class

    3 常數據成員在定義時必須賦值或稱爲必須初始化。變量

    4 若是累有多個默認構造函數必須都初始化常數據成員。權限

 

經過下面例子來理解常數據成員:構造函數

 1 class A{
 2 private:
 3 int w,h;
 4 const int cctwl=5;  //錯誤一
 5 public:
 6 };
 7 void main(){           
 8 A a ;   //錯誤二        
 9 cout<< "sss";           
10 system("pause");}

 

錯誤一:不能對常數據成員在類中初始化、要經過類的構造函數,只有靜態常量才能這樣初始化。

錯誤二:沒有合適的默認構造函數可用。由於有常量cctwl沒有初始化必須初始化全部常數據成員。

 

多個構造函數下的常數據成員

 
 
class A{
    private:    
        int w,h;     
    const int  cctwl;
public:    
    const int cct;    
    A():cctwl(5),cct(6){};    
    A(int x,int y) //錯誤一   
    {         
        w=x,h=y;    
    }
};
void main()
{    
    A a ;    
    A b(3,8);    
    cout<< "sss";    
    system("pause");
}

            
 
 

 

 

 

錯誤一:每一個構造函數都要初始化常數據成員應改成

1 A(int x,int y):cctwl(7),cct(8) 
2 {    
3     w=x,h=y; 
4 }

 

 

 1 class Point{
 2 private:
 3     int x, y;    
 4         const int e;    
 5         static int count;
 6 public:    
 7         Point(int xx, int yy,int ee):e(ee),x(xx),y(yy)    
 8         {
 9         count++;
10     }
11     void Show_C()    
12         {
13         cout << "C = " << c << endl;
14         //cout << "D = " << d << endl;  //這裏就已經沒有訪問權限了
15     }
16     static int Show_Count()
17     {
18         return count;
19     }
20     int c = 250;
21     const int d = 360;    //能夠直接在聲明的時候賦值
22 };
23   

① 咱們能夠在定義const變量的時候直接對其進行賦值,賦值事後便沒法再對它進行各類"計算"操做;

② 若是不在定義的時候賦值,那就須要在該類的構造函數中使用初始化列表進行賦值(初始化):

在類的通常函數成員中依然能夠訪問const類型的數據成員。

相關文章
相關標籤/搜索