




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
常成员函数及静态成员获取vs改变对象的状态在程序运行的不同时刻,一个对象可能会处于不同的状态:对象的状态由对象的数据成员的值来体现。可以把类中的成员函数分成两类:获取对象状态(不改变数据成员的值)改变对象状态(改变数据成员的值)例如classDate{ public: voidset(inty,intm,intd);//改变对象状态
intget_day();//获取对象状态
intget_month();//获取对象状态
intget_year();//获取对象状态
......};为了防止在一个获取对象状态的成员函数中无意中修改对象数据成员的值,可以把它说明成常成员函数。例如,classDate{ public: voidset(inty,intm,intd);
intget_day()const;//常成员函数
intget_month()const;//常成员函数
intget_year()const;//常成员函数
......};voidDate::set(inty,intm,intd){year=y;month=m;day=d;}intDate::get_day()const{returnday;}intDate::get_month()const{returnmonth;}intDate::get_year()const{returnyear;}编译器一旦发现在常成员函数中修改数据成员的值,将会报错!常成员函数注意:对于有些修改对象状态的常成员函数,编译程序不会指出错误!classA{ intx; char*p; public: ...... voidf()const
{x=10;//Error p=newchar[20];//Error
strcpy(p,"ABCD");//因为没有改变p的值,
//编译程序认为OK! }};常成员函数还有一个作用:指出对常量对象能实施哪些操作,即,对常量对象只能调用类中的常成员函数。例如:classDate{public:voidset(inty,intm,intd);intget_day()const;intget_month()const;intget_year()const;
......};voidf(constDate&d)//d引用的是个常量对象!{...d.get_day()...//OK...d.get_month()...//OK...d.get_year()...//OKd.set(2011,3,23);//Error}同类对象如何共享数据?方案一:采用全局变量来表示共享数据。例如:intx=0;//全局变量classA{inty;
......voidf(){y=x;x++;......}//访问共享的x}a,b;//以下操作对同一个x进行a.f();b.f();共享的数据与对象之间缺乏显式的联系数据缺乏保护!x++;//不通过A类对象也能访问x,不安全!方案二:采用静态数据成员可以更好地实现同一个类的不同对象之间的数据共享。例如classA{inty;
......
staticintx;//静态数据成员声明voidf(){y=x;x++;......}//访问共享的x};intA::x=0;//静态数据成员定义及初始化......Aa,b;a.f();b.f();//上述操作对同一个x进行x++;//Error,不通过A类对象不能访问x!静态数据成员
类的静态数据成员对该类的所有对象只有一个拷贝。例如,对于下面A类中的shared:classA{ intx,y;
staticintshared;
public: A(){x=y=0;} voidincrease_all(){x++;y++;shared++;} intsum_all()const{returnx+y+shared;} ......};intA::shared=0;Aa1,a2;
shared:0a1 a2a1.x:0 a2.x:0a1.y:0 a2.y:0Aa1,a2;
shared:1a1 a2a1.x:1 a2.x:0a1.y:1 a2.y:0a1.increase_all();cout<<a2.sum_all()<<endl;//输出:1静态成员函数成员函数也可以声明成静态的(静态成员函数)。例如:classA{ intx,y; staticintshared; public: A(){x=y=0;}
staticintget_shared()//静态成员函数
{returnshared;
} ......};intA::shared=0;静态成员函数只能访问类的静态成员。静态成员函数没有隐藏的this参数!静态成员除了通过对象来访问外,也可以直接通过类来访问。例如:Aa;......cout<<a.get_shared();或者cout<<A::get_shared();classA{staticintobj_count;…...public:A()//在所有构造函数中增加:obj_count++;{obj_count++;......}~A()//在析构函数中增加:obj_count--;{obj_count--;......}staticintget_num_of_objects(){returnobj_count; }…...};intA::obj_count=0;......//其中创建了一系列A类对象cout<<A::get_num_of_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大学生职业规划大赛《核工程与核技术专业》生涯发展展示
- 2025企业员工劳动合同书范本
- 2025湿地保护的合同范文
- 一年级适应策略
- 研究之路的展望
- 2025科技创新合作合同范本
- 因材施教深度探析
- 2025附条件赠与合同
- 餐饮基层管理
- 门诊发热病人的处置流程
- 2024年广州市高中毕业班综合测试二英语试卷试题(含答案)
- 医院专项资金管理办法
- 2024-2029年中国电泳电子纸显示器行业市场现状供需分析及市场深度研究发展前景及规划战略投资分析研究报告
- 中考一模质量分析数学
- (正式版)JBT 6434-2024 输油齿轮泵
- 化工和危险化学品生产经营单位二十条重大隐患判定标准释义(中化协)
- 2023《住院患者身体约束的护理》团体标准解读PPT
- 建筑工地节前停工安全检查表
- 苏科版八年级数学下册题型突破提高类型五、反比例函数与一次函数结合求不等式解集与面积(原卷版+解析)
- 问题解决过程PSP-完整版
- 山西医药投资价值分析报告
评论
0/150
提交评论