首页 > 代码库 > 强制性输出private中变量的三种方法

强制性输出private中变量的三种方法

众所周知,private里面的变量不可以输出,但是也可以通过特殊途径获得。

1.通过指针暴力内存,把它索罗出来,方法:调试,破掉语法。

并且还可以对类对象进行修改。

技术分享
 1 // Thread.cpp : 定义控制台应用程序的入口点。 2 // 3  4 #include "stdafx.h" 5 #include <WinSock2.h> 6 #include <Windows.h> 7  8 #include <iostream> 9 using namespace std;10 class MyClass11 {12 public:13     MyClass();14     ~MyClass();15     int m_1;16 protected:17     int m_2;18 private:19     int m_3;20 };21 22 MyClass::MyClass()23 {24     m_1 = 10;25     m_2 = 20;26     m_3 = 20;27 }28 29 MyClass::~MyClass()30 {31 }32 int main()33 {34     MyClass Object;                                                             35 36     printf("%d\r\n", *((int*)(&Object) + 1));37     return 0;38 }
卷珠帘

 

2.在类中提供函数,但丧失了读的属性。

技术分享
// Thread.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <WinSock2.h>#include <Windows.h>#include <iostream>using namespace std;class MyClass{public:    MyClass();    ~MyClass();    int m_1;    int Getm_3()    {        return m_3;    }protected:    int m_2;private:    int m_3;};MyClass::MyClass(){    m_1 = 10;    m_2 = 20;    m_3 = 20;}MyClass::~MyClass(){}int main(){    MyClass Object;                                                                   printf("%d\r\n", Object.Getm_3()); //必须提供接口,并且只能读,不能修改。    return 0;}
卷珠帘

 

3.王道:启动线程与类结合。线程可以破除class的私有属性。

技术分享
 1 // Thread.cpp : 定义控制台应用程序的入口点。 2 // 3  4 #include "stdafx.h" 5 #include <WinSock2.h> 6 #include <Windows.h> 7  8 #include <iostream> 9 using namespace std;10 //类与线程,线程可以访问非全局变量,尤其是私有指针11 12 class MyClass13 {14 public:15     MyClass();16     ~MyClass();17     int m_1;18 protected:19     int m_2;20 private:21     int m_3;22 public:23     static DWORD WINAPI ThreadProc(LPVOID Param); //线程不能所属一个类里,所以必须加关键字,static24     VOID Sub_1()25     {26         HANDLE ThreadHandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, this, 0, NULL);27         WaitForSingleObject(ThreadHandle, INFINITE);28     }29 };30 31 MyClass::MyClass()32 {33     m_1 = 10;34     m_2 = 20;35     m_3 = 20;36 }37 38 MyClass::~MyClass()39 {40 }41 42 DWORD WINAPI ThreadProc(LPVOID Param);43 int main()44 {45     MyClass Object;46     Object.Sub_1();47     return 0;48 }49 50 DWORD WINAPI MyClass::ThreadProc(LPVOID Param)51 {52     printf("%d\r\n", ((MyClass*)(Param))->m_3);53     return 0;54 }
卷珠帘

 

强制性输出private中变量的三种方法