C++学习笔记 const修饰类成员与成员函数

一、 常数据成员

 常数据成员,已经初始化就不可以改变

1   const int m;  //const 数据类型 数据成员名
2   int const s;   //数据类型 const 数据成员名

被const修饰的成员必须进行初始化,并且不能被更改。而初始化的方式则是在类的构造函数的初始化列表里进行的。

1 class Clock
2 
3 
4 Clock(int a,int b,int c):h(a),m(b),s(c)//类的构造函数的初始化列表

 

通常把常数据成员定义为静态成员,使其成为类的一个常量

1 private:    static const int x;  //静态常量类内申明,类外初始化

其中x为static类型,因其静态化的特殊性,需要在类外初始化,即便为私有类型;

二,常成员函数

const成员函数可以使用类中的所有成员变量,但是不能修改他们的值,这种措施主要为了保护数据而设置。const成员函数也称常成员函数。

需要在声明和定义的时候在函数头部的结尾加上const关键字

1  char *getname() const;
2   int getage() const;
3  float getscore() const;

常成员函数只能调用常成员函数,而不能调用非常成员函数,访问但不可以更改非常成员变量。

注意:但是有一种情况例外,如果成员申明时加关键字mutable后,在常函数中依然可以修改

 

1 //类名 *p=this;
2 //普通类成员函数this指针:T* const(表示指针本身不能修改)
3 //常成员函数this指针类型:const T* const(表示指针本身同时指针指向的内容不能修改)
4 //类名 * const p=(类名* const)this;
5 
6 //p->成员=123;可以修改成员参数

三,常对象

  常对象是指该对象在其生命周期内,其所有的数据成员的值都不能被改变;定义对象时加上关键字const,该对象就是常对象,其一般形式如下:

 

1 const  class  object(params);
2 class const object(params);
3 
4 
5 //定义const指针
6 const class *p = new class(params);
7 class const *p = new class(params);

一旦将对象定义为常对象之后,不管是哪种形式,该对象就只能访问被 const 修饰的成员了(包括 const 成员变量和 const 成员函数),因为非 const 成员可能会修改对象的数据(编译器也会这样假设),C++禁止这样做。

 

数据成员非const的普通成员函数const成员函数
非const的普通数据成员 可以引用,也可以改变值 可以引用,但不可以改变值
const数据成员 可以引用,但不可以改变值 可以引用,但不可以改变值
const对象 不允许 可以引用,但不可以改变值

 

注意:1,不要误认为常对象中的成员函数都是常成员函数,常对象只保证其所有数据成员的值不被修改

   2,如果在常对象中成员函数未加const声明,则编译系统会把它当最非const成员函数处理

    3,常成员函数不能调用另外一个非const成员函数

 

posted @ 2021-07-13 20:52  刘允朵的代码屋  阅读(370)  评论(0编辑  收藏  举报