?博主主页:@ᰔᩚ. 一怀明月ꦿ
❤️?专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章
?座右铭:“不要等到什么都没有了,才下定决心去做”
???大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点???
目录
?对象与const
?常对象
?常对象成员
?常数据成员
?常成员函数
?指向对象的常指针
?指向常对象的指针(常量指针)
?对象的常引用
?对象与const
?常对象
常对象的数据为常变量且必须要有初值,声明常对象的一般形式为:const 类名 对象名[ 实参表 ];或者: 类名 const 对象名[ 实参表 ];
如果一个对象被声明为常对象,则不能调用该对象的非const型的成员函数(除了由系统自动调用的隐式的构造函数和析构函数)。 注意: 有时候在编程时有要求,一定要修改常对象中的某个数据成员的值,ANSI C++考虑到实际编程的需要,对此做了特殊处理,将数据成员声明为mutable,如: mutable int count; 把count声明为可变的数据成员,这样就可以声明为const的成员函数来修改它的值 ?常对象成员
?常数据成员
常数据成员的声明和作用与普通的常变量类似,也是使用const来声明,也是在程序运行过程中数据成员的值不能修改。常变量在声明时同时必须初始化,常数据成员在声明时也必须初始化,常数据成员在初始化时必须使用构造函数的初始化列表。假如将Box类的数据成员length声明为常数据成员,则对length的初始化必须使用构造函数的初始化列表进行,构造函数如下:Box::Box(float L ,float W ,float H):length(L){ width=W; height=H;}
?常成员函数
常成员函数就是将类中的成员函数声明为const型,这样的成员函数不能修改类对象的数据成员的值,如果在成员函数出现修改数据成员的语句,编译系统在编译时会报错。如果对象声明为常对象,则为保证常对象的数据成员不被修改,通过常对象名只能访问该对象的常成员函数。 声明常成员函数的一般形式:返回类型 成员函数名(形参表)const;返回类型 类名 :: 成员函数名(形参表)const;
注:关键字const是函数的一部分,在函数声明和定义部分都必须包含,但在调用时不必加const。 不同类型的成员函数与数据成员之间的访问关系 成员函数分类/数据成员分类 | const型成员函数 | 非const型成员函数 |
const型数据成员 | 可以访问,不可修改值 | 可以访问,不可修改值 |
非const型数据成员 | 可以访问,不可修改值 | 可以访问,可以修改值 |
常对象数据成员 | 可以访问,不可修改值 | 不可以访问,不可以修改值 |
?指向对象的常指针
这个指针不能再指向其他的对象。定义指向对象的常指针的一般形式(指针常量)类名* const 指针名=&类对象
?指向常对象的指针(常量指针)
指向常对象的指针定义const 类名*指针名
(1)如果一个对象已被声明为常对象,只能使用指向常对象的指针指向它。 (2)如果定义了一个指向常对象的指针,并让它指向非const的对象,则其指向的对象是不能通过指针修改的。但是指向常对象的指针其本身的值是可以修改的 ?对象的常引用
对象的引用就是对象的别名,对象的引用名和对象名其实都是内存的同一个空间的名字。可以通过引用使用对象,就像通过对象名使用对象一样。引用的一个特点是定义引用时就要给引用初始化。 对象的常引用,通过常引用只能调用对象的const成员函数 。 声明对象的常引用的一般形式:const 类名 &引用名=对象名如:Clock clock(12,12,12);const Clock &refclock=clock;refclock.display();
display()如果是const成员函数,则合法,若不是const成员函数,则非法。 ???如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! ???