plague0

导航

111

const修饰的定义对象成为常对象;(两种声明方式)

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

 

 

const修饰的声明成员函数成为常成员函数;

 

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修饰的声明数据成员成为常数据成员;

注意:变量或对象被const修饰后其值不能被更新(除非数据成员被mutable修饰时,可以被修改)。因此被const修饰的变量或者对象要进行初始化。

说明:

   1 任何函数都不能对常数据成员赋值。

    2 构造函数对常数据成员进行初始化时也只能通过初始化列表进行。

    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类型的数据成员。

posted on 2019-10-09 10:09  plague0  阅读(101)  评论(0编辑  收藏  举报