C++类访问控制publicprivateprotected探讨.pdfVIP

C++类访问控制publicprivateprotected探讨.pdf

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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

文档评论(0)

wannian118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档