C++中的常对象与常对象成员详解
常对象
常对象必须在定义对象时就指定对象为常对象。
常对象中的数据成员为常变量且必须要有初始值,如
Time const t1(12,34,36); //定义t1为常对象
这样的话,在所有的场合中,对象t1中的所有数据成员的值都不能被修改。凡希望保证数据成员不被改变的对象,可以声明为常对象。
定义常对象的一般形式为
类名 const 对象名(实参列表);
也可以把const写在最左面
const 类名 对象名(实参列表);
二者等价
如果一个对象被声明为常对象,则不能调用该对象的非const型的成员函数(除了由系统自动调用的隐式构造函数和析构函数)。
否则就会报错
这样做是为了方式非const型的成员函数修改常对象中的数据成员的值,因为const型的成员函数是不可以修改对象中的数据成员的值的(这个后面还会说到)。
那么,怎样才能引用常变量中的数据成员呢?很简单,我们只需要将该成员函数声明称const型的成员函数(常成员函数)即可。
void Print() const;
常成员函数可以访问常对象中的数据成员,但仍然不允许修改常对象中数据成员的值。
有时在编程时有要求,一定要修改常对象成员中的某个数据成员的值(例如类中有一个用于计数的变量count,其值应当不能变化),
对该数据成员声明为mutable,如
mutable int count;//定义一个在常对象中可以被改变的数据成员
把count声明为可变的数据成员,这样就可以用声明为const的成员函数来修改它的值。
=========================一个简单的示例程序1.1====================================
#include<iostream>
using namespace std;
class Student
{
<span style="white-space:pre"> </span>public:
<span style="white-space:pre"> </span>Student(int n,float s):num(n),score(s){}
<span style="white-space:pre"> </span>void change(int n,float s) const{num=n;score=s;}
<span style="white-space:pre"> </span>void display() const{cout<<num<<"\t"<<score<<endl;}
<span style="white-space:pre"> </span>private:
<span style="white-space:pre"> </span>mutable int num;
<span style="white-space:pre"> </span>mutable float score;
} ;
int main()
{
<span style="white-space:pre"> </span>Student const stud(101,78.5);
<span style="white-space:pre"> </span>stud.display();
<span style="white-space:pre"> </span>stud.change(101,80.5);
<span style="white-space:pre"> </span>stud.display();
<span style="white-space:pre"> </span>return 0;
};
我们定义了常对象stud,然后分别调用了两个常函数display()和change(),但是在change函数中要修改常对象中的num和score的值,所以我们将num和score定义为mutable.
常对象成员
1.常数据成员
其作用和用法与一般常变量相似,用关键字const来声明常数据成员。常数据成员的值是不能改变的。
只能通过构造函数的参数初始化表对常数据成员进行初始化。
在类体中声明常数据成员
const int num;//声明hour为常数据成员
在类外定义构造函数
Student::Student(int n,float s):num(n),score(s){} //通过参数初始化表对常数据成员num和score初始化
在类体中声明了某一个数据成员为常数据成员后,该类所有对象中的该数据成员的值都是不能改变的,但不同对象中该变量成员的值可以是不同的(分别在初始化时指定)。
2.常成员函数
如果将成员函数声明为常成员函数,则只能引用本类中的数据成员,而不能修改它们。
注意:常对象只能引用常成员函数
常成员函数的定义形式:
void Print() const;//注意const的位置在函数名和括号之后
const是函数类型的一部分,在声明函数和定义函数都要有const关键字,在调用时不必加const。
常成员函数可以const数据成员,也可以引用非const数据成员,但是都不能修改他们;
不是常成员函数的函数可以调用const数据成员,但是不能修改它们,也可以调用非const数据成员,并且可以修改它们。
具体情况,如图1:
还要注意一下三点:
1.不要误认为常对象中的成员函数都是常成员函数,常对象只保证其所有数据成员的值不被修改。
2.如果在常对象中的成员函数未加const声明,则编译系统会把它当最非const成员函数处理。
3.还要注意,常成员函数不能调用另外一个非cosnt成员函数。
上一篇:C++中栈结构建立与操作详细解析
栏 目:C语言
本文标题:C++中的常对象与常对象成员详解
本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/3972.html
您可能感兴趣的文章
- 04-02c语言没有round函数 round c语言
- 01-10深入理解C++中常见的关键字含义
- 01-10使用C++实现全排列算法的方法详解
- 01-10深入Main函数中的参数argc,argv的使用详解
- 01-10c++中inline的用法分析
- 01-10如何寻找数组中的第二大数
- 01-10用C++实现DBSCAN聚类算法
- 01-10全排列算法的非递归实现与递归实现的方法(C++)
- 01-10C++大数模板(推荐)
- 01-10浅谈C/C++中的static与extern关键字的使用详解
阅读排行
本栏相关
- 04-02c语言函数调用后清空内存 c语言调用
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言的正则匹配函数 c语言正则表达
- 04-02c语言用函数写分段 用c语言表示分段
- 04-02c语言中对数函数的表达式 c语言中对
- 04-02c语言编写函数冒泡排序 c语言冒泡排
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段
- 04-02C语言中怎么打出三角函数 c语言中怎
- 04-02c语言调用函数求fibo C语言调用函数求
随机阅读
- 01-10SublimeText编译C开发环境设置
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 04-02jquery与jsp,用jquery
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-10C#中split用法实例总结
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 01-10delphi制作wav文件的方法
- 01-11ajax实现页面的局部加载
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文