• 看待类和对象/C++的访问修饰符的作用


        类是将数据成员和进行于其上的一系列操作(成员函数)封装在一起,注意:成员函数可以操作数据成员(可以称类中的数据成员为泛数据成员)!
        对象是类的实例化,怎样理解实例化?其实每一个实例对象都只是对其中的数据成员初始化,内存映像中每个对象仅仅保留属于自己的那份数据成员副本。而成员函数对于整个类而言却是共享的,即一个类只保留一份成员函数。
        那么每个对象怎样和这些可以认为是“分离”的成员函数发生联系,即成员函数如何操作对象的数据成员?记住this指针,无论对象通过(.)操作或者 (->)操作调用成员函数,编译时刻,编译器都会将这种调用转换成我们常见的全局函数的形式,并且多出一个参数(一般这个参数放在第一个),然后将 this指针传入这个参数。于是就完成了对象与成员函数的绑定(或联系).
        实例化后就得到同一个类的多个不同的对象,既然成员函数共享的,那么成员函数就可以操作对象的数据成员。问题是现在有多个对象,成员函数需要知道操作的是哪个对象的数据成员?
        比如有对象obj1和obj2,都属于A类,A类有public成员函数foo().如果obj1调用该函数,编译时会给foo函数传入this指针,obj1.foo中操作obj1自身的成员就不用任何修饰,直接访问,因为其中的数据成员自动根据this指针找到。如果obj1调用该函数,同样可以访问同类的其他对象的数据成员!那么你需要做的是让foo函数知道是同类对象中哪个对象的数据成员,一个解决办法是传入同类其他对象的指针或引用,那么就可以操作同类其他对象的数据成员。
    foo(A &obj)
    这样定义,然后调用:
    obj1.foo(obj2)
    就可以在obj1访问obj2的数据成员,而无论这些数据成员是private还是protected。
     
    总结:C++的访问修饰符的作用是以类为单位,而不是以对象为单位。
     
    通俗的讲,同类的对象间可以“互相访问”对方的数据成员,只不过访问途径不是直接访问.
    步骤是:通过一个对象调用其public成员函数,此成员函数可以访问到自己的或者同类其他对象的public/private/protected数据成员和成员函数(类的所有对象共用),而且还需要指明是哪个对象的数据成员(调用函数的对象自己的成员不用指明,因为有this指针;其他对象的数据成员可以通过引用或指针间接指明)
  • 相关阅读:
    微信公众平台开发最佳实践
    微信公众平台运营规范
    微信智能开放平台
    微信公众平台模版消息
    Ace
    ZigBee介绍
    基于微信控制的智能家居产品
    微信商业模式的挑战点
    微信公众平台开发接口PHP SDK完整版
    微信公众平台开发(84) 小i机器人
  • 原文地址:https://www.cnblogs.com/yzy6806555/p/2993614.html
Copyright © 2020-2023  润新知