- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C类访问控制publicprivateprotected探讨
C++ public/private/protected
C++ public/private/protected
CC++++ 类访问控制ppuubblliicc//pprriivvaattee//pprrootteecctteedd探讨
原帖如下
1 #includeIOSTREAM
2 usingnamespace std;
3
4 class A{
5 public:
6 A(int i_,intj_)
7 {
8 i=i_;
9 j=j_;
10 }
11 voiddisp(Aa)
12 {
13 couta.iendla.jendl;
14 }
15
16 private:
17 inti;
18 protected:
19 intj;
20 };
21
22 intmain(intargc,char*argv[])
23 {
24 Aa(123,456);
25 Ab(789,543);
26 a.disp(b);
27 b.disp(a);
28
29 return 0;
30 }
初看起来,倒是会产生疑问。为什么会这样,是否有bug?
仔细考究起来,我们其实可以这样看待类和对象:
类是将数据成员和进行于其上的一系列操作(成员函数)封装在一起,注意:成员函数可以操作数据成员(可
以称类中的数据成员为泛数据成员)!
对象是类的实例化,怎样理解实例化?其实每一个实例对象都只是对其中的数据成员初始化,内存映像中
每个对象仅仅保留属于自己的那份数据成员副本。而成员函数对于整个类而言却是共享的,即一个类只保
留一份成员函数。
那么每个对象怎样和这些可以认为是“分离”的成员函数发生联系,即成员函数如何操作对象的数据成员?
记住this 指针,无论对象通过(.)操作或者 (-)操作调用成员函数,编译时刻,编译器都会将这种调用转换
成我们常见的全局函数的形式,并且多出一个参数(一般这个参数放在第一个),然后将 this 指针传入这个
参数。于是就完成了对象与成员函数的绑定(或联系).
实例化后就得到同一个类的多个不同的对象,既然成员函数共享的,那么成员函数就可以操作对象的数据
成员。
问题是现在有多个对象,成员函数需要知道操作的是哪个对象的数据成员?
比如有对象obj1和obj2,都属于A类,A类有public 成员函数foo()
如果obj1调用该函数,编译时会给foo 函数传入this 指针,obj1,foo 中操作obj1自身的成员就不用任何修
饰,直接访问,因为其中的数据成员自动根据this 指针找到。
如果obj1调用该函数,同样可以访问同类的其他对象的数据成员!那么你需要做的是让foo 函数知道是同
类对象中哪个对象的数据成员,一个解决办法是传入同类其他对象的指针或引用,那么就可以操作同类其
他对象的数据成员。
foo(Aobj)
这样定义,然后调用:
obj1.foo(obj2)
就可以在obj1访问obj2的数据成员,而无论这些数据成员是private 还是protected
搬出C++ObjectModel,可以画出各个对象的内存map就可以更清晰的看出:
C++
C++
总结:CC++++的访问修饰符的作用是以类为单位,而不是以对象为单位。
通俗的讲,同类的对象间可以“互相访问”对方的数据成员,只不过访问途径不是直接访问.
步骤是:通过一个对象调用其public成员函数,此成员函数可以访问到自己的或者同类其他对象的
public/private/protected数据成员和成员函数(类的所有对象共用),而且还需要指明是哪个对象的数据成员
(调用函数的对象自己的成员不用指明,因为有this 指针;其他对象的数据成员可以通过引用或指针间接指
明)
C++中public,protected,private 访问小结
第一:private,public,protected方法的访问范围.(public继承下)
private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问.
protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问
public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问
注:友元函数包括两种:设为友元的全局函数,设为友元类中的成员函数
第二:类的继承后方法属性变化:
使用pr
您可能关注的文档
- (华为培训)WCDMA产品知识.doc
- (小字体适合打印)高速铁路精密测量控制技术.doc
- ----数码快印市场分析-.doc
- @@@@@化工管道设计技术词汇.doc
- aa农村基层组织发展的经济学分析王文峰.pdf
- ABAQUS前后处理模块二次开发的应用.pdf
- ABB设备知识培训建议书.doc
- AB钥匙锁的原理与开启方法.docx
- ADAMS和Matlab的EPS和整车系统的联合仿真.pdf
- AHP模煳综合评价方法的分析与研究.pdf
- 四川省德阳市罗江中学2025届高三考前热身化学试卷含解析.doc
- 山东省枣庄现代实验学校2025届高三下学期第五次调研考试化学试题含解析.doc
- 吉林省长春市十一高中等九校教育联盟2025届高三一诊考试生物试卷含解析.doc
- 2025届江苏省盐城市伍佑中学高考仿真模拟化学试卷含解析.doc
- 2025届广西贺州中学高考冲刺押题(最后一卷)生物试卷含解析.doc
- 安徽省池州市贵池区2025届高三第一次模拟考试生物试卷含解析.doc
- 宁夏银川一中2025届高三(最后冲刺)化学试卷含解析.doc
- 广东省广州市增城区四校联考2025届高考压轴卷化学试卷含解析.doc
- 2025届邯郸市第一中学高考生物必刷试卷含解析.doc
- 2025届安徽省安庆市石化第一中学高考仿真卷化学试卷含解析.doc
最近下载
- 山东省泰安市泰山区2023-2024学年上学期期中考试七年级英语试题.docx VIP
- 财务管理实务 财务管理实务 实训指导书.doc
- 2024年新人教版九年级上册化学全册教案.docx
- 上海通用汽车GVDP整车开发流程.pdf VIP
- 苏教版四年级上册同步奥数培优 第十四讲 智巧问题.pdf VIP
- 2024年江苏省苏州高新区招聘“两新”组织党建专职党务工作者6人历年【综合基础知识500题】高频考点模拟试题及参考答案解析.docx VIP
- 2024年武汉市东湖生态旅游风景区管理委员会公开招聘机关派遣制工作人员9人笔试备考试题及答案解析.docx VIP
- 人教版普通高中地理选择性必修2区域发展.pdf
- 人体解剖学常考重要知识点.doc
- 2023年江苏苏州相城区招考聘用两新组织党建专职党务工作者23人笔试历年难易错点考题荟萃附带答案详解.docx VIP
文档评论(0)