- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、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
您可能关注的文档
最近下载
- 企业法律知识培训讲座培训课件——房地产法律合规与风险管控(1).pptx VIP
- 2025南方电网保山供电局项目制用工招聘(3人)笔试备考试题及答案解析.docx VIP
- 大学生五四青年课活动策划书范文 - 172校园活动网.doc VIP
- 烹调工艺学全套教学课件.pptx
- 新时达电梯控制系统AS380S随机图纸RH0000741;国标20;非18芯;V1.0.pdf
- 电气设备操作与检修安全课件.ppt VIP
- 新22J03 外装修图集.pptx
- DBJ/T01-43-2003《家庭居室装饰工程质量验收标准》.pdf VIP
- XX工程监理人员进场计划安排(2023年).docx VIP
- 无人机测绘技术:无人机机载激光雷达测量PPT教学课件.pptx VIP
文档评论(0)