美文网首页
C/C++黑魔法-无限制访问私有属性

C/C++黑魔法-无限制访问私有属性

作者: Qt君 | 来源:发表于2020-01-06 00:42 被阅读0次

C++的private用于限制成员或函数的可见性,主要是为了避免误用和降低维护成本。

  有些人却认为,我的就是我的,不要你觉得,我要我觉得。即使不能直接访问私有成员,我也要找其他的方式来访问。来看看有哪些访问私有属性的方法吧。

通过编译参数开启

-fno-access-control是gcc编译器选项,可以直接开启访问私有属性大门。主要多用于单元测试

通过对象的偏移地址访问

  C++的对象可以看作是一个指针数组。这个指针数组存放的是对象的虚函数表和数据成员的地址。既然是指针数组,当然可以通过指针来访问对象的任何成员。如例子:

class Test
{
public:
    void print()
    {
        printf("%d %d %d\n", m_a, m_b, m_c);
    }

private:
    int m_a;
    int m_b;
    int m_c;
};

int main(int argc, char *argv[])
{
    Test t;
    int *a = (int *)&t+0; /* m_a的地址 */
    int *b = (int *)&t+1; /* m_b的地址 */
    int *c = (int *)&t+2; /* m_c的地址 */
    *a = 10;
    *b = 20;
    *c = 30;

    t.print();
    return 0;
}

  输出:

10 20 30

使用宏替换

  使用下列宏用来把private关键词替换为public从而开启访问私有属性的大门。

#define private public

一些观点

  似乎有些人认为,类中的public,protected,private是理所当然存在的,说编程上的类可以模拟生活中的事物。Qt君认为其实不然,为什么会制造出访问级别,主要是限制用户乱用。但是即使有这种机制也会架不住用户不懂的乱用。

关注公众号Qt君,第一时间获取最新推送。

相关文章

网友评论

      本文标题:C/C++黑魔法-无限制访问私有属性

      本文链接:https://www.haomeiwen.com/subject/jvlhactx.html