使用成员变量的偏移量访问结构的私有成员

时间:2014-06-02 15:34:46

标签: c++ struct

我正在阅读有关结构和struct padding的内容,我编写了这段代码。它使用从a的地址偏移编辑结构的私有成员。这是否意味着您可以参加某人制作的课程并提取/更改私人变量和功能?

#include <iostream>
typedef struct x {
    int a; 
private:
    int b;
public:
//Init
    x(int a, int b) : a(a) , b(b){}

    void print(){
        //Print values
        std::cout << a << " " << b << std::endl;
    }
} x;

int main()
{
    struct x s(10,20) ;
    int *p = (int *)(((char*)&s)+4); //4 Byte offset from a (a is at base)
    s.print();
    (*p) +=1;
    s.print();

    //Stops terminal closing
    int junk;
    std::cin >> junk;
    return 1;
}

2 个答案:

答案 0 :(得分:4)

C ++&#39; s private用于为抽象数据类型提供封装机制。

答案 1 :(得分:1)

  

这是否意味着您可以参加某人制作的课程并提取/更改私人变量和功能?

C ++标准对此类事项没有要求。具体而言,对struct内的对象大小没有要求。 int的大小是实现定义的。

这可能是一个坏主意,很可能是一种设计气味。