zoukankan      html  css  js  c++  java
  • 在仅拿到头文件的情况下,如何修改类中的私有成员值?

    1 通过使用从对象开始处的硬编码/手工编码的偏移量构造指针来访问私有成员数据

    class Weak
    {
    public:
    	Weak() = default;
    	~Weak() = default;
            // 想想如果去掉该函数,外部想修改类中的私有成员变量 m_name 时该如何操作?
    	void name(const std::string &name) {
    		m_name = name;
    	}
    	std::string name() const {
    		return m_name;
    	}
    private:
    	std::string m_name;
    };
    
    struct Hacker
    {
    	std::string name;
    };
    
    int main()
    {
    	Weak w;
    	w.name("zeros");
    	std::cout << w.name() << std::endl;
            
            // 通过构造一个和类布局一样的结构体,通过指针偏移来修改类中的私有成员函数。
    	Hacker *hacker = reinterpret_cast<Hacker*>(&w);
    	hacker->name = "xiaoyu";
    	std::cout << w.name() << std::endl;
            return 0;
    }
    

    2 . 使用联合体 union

    class Point
    {
    public:
    	void print() {
    		std::cout << x << "x" << y << std::endl;
    	}
    private:
    	int x, y;
    };
    
    class Proxy
    {
    public:
    	void print() {
    		std::cout << x << "x" << y << std::endl;
    	}
    public:
    	int x,y;
    };
    
    int main()
    {
    	union
    	{
    		Point a;
    		Proxy b;
    	} x;
    	x.a = Point();
    	x.b.x = 3;
    	x.b.y = 5;
    	x.a.print();
            return 0;
    }
    
  • 相关阅读:
    时间日期事件处理、长按事件
    单选按钮触发事件、下拉列表触发事件
    事件
    笔记3
    笔记2
    笔记1
    布局管理器
    08、shell三剑客之sed
    07、shell三剑客之grep
    06、shell正则表达式
  • 原文地址:https://www.cnblogs.com/cheungxiongwei/p/12099471.html
Copyright © 2011-2022 走看看