C++学习笔记const修饰类成员与成员函数
⼀、常数据成员
常数据成员,已经初始化就不可以改变
1const int m; //const 数据类型数据成员名
2int const s; //数据类型 const 数据成员名
被const修饰的成员必须进⾏初始化,并且不能被更改。⽽初始化的⽅式则是在类的构造函数的初始化列表⾥进⾏的。
1class Clock
2
3
4 Clock(int a,int b,int c):h(a),m(b),s(c)//类的构造函数的初始化列表
通常把常数据成员定义为静态成员,使其成为类的⼀个常量
1private:static const int x; //静态常量类内申明,类外初始化
其中x为static类型,因其静态化的特殊性,需要在类外初始化,即便为私有类型;
⼆,常成员函数
const成员函数可以使⽤类中的所有成员变量,但是不能修改他们的值,这种措施主要为了保护数据⽽设置。const成员函数也称常成员函数。
需要在声明和定义的时候在函数头部的结尾加上const关键字
1char *getname() const;
2int getage() const;
3float 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,该对象就是常对象,其⼀般形式如下:
1const class object(params);
2class const object(params);
3
4
5//定义const指针
6const class *p = new class(params);
7class const *p = new class(params);
⼀旦将对象定义为常对象之后,不管是哪种形式,该对象就只能访问被 const 修饰的成员了(包括 const 成员变量和 const 成员函数),因为⾮ const 成员可能会修改对象的数据(编译器也会这样假设),C++禁⽌这样做。
数据成员⾮const的普通成员函数const成员函数
⾮const的普通数据成员可以引⽤,也可以改变值可以引⽤,但不可以改变值
const数据成员可以引⽤,但不可以改变值可以引⽤,但不可以改变值
const对象不允许可以引⽤,但不可以改变值
注意:1,不要误认为常对象中的成员函数都是常成员函数,常对象只保证其所有数据成员的值不被修改 2,如果在常对象中成员函数未加const声明,则编译系统会把它当最⾮const成员函数处理
3,常成员函数不能调⽤另外⼀个⾮const成员函数
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论