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

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

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

 // Thread.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <WinSock2.h>
#include <Windows.h> #include <iostream>
using namespace std;
class MyClass
{
public:
MyClass();
~MyClass();
int m_1;
protected:
int m_2;
private:
int m_3;
}; MyClass::MyClass()
{
m_1 = ;
m_2 = ;
m_3 = ;
} MyClass::~MyClass()
{
}
int main()
{
MyClass Object; printf("%d\r\n", *((int*)(&Object) + ));
return ;
}

卷珠帘

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 = ;
m_2 = ;
m_3 = ;
} MyClass::~MyClass()
{
}
int main()
{
MyClass Object;
printf("%d\r\n", Object.Getm_3()); //必须提供接口,并且只能读,不能修改。
return ;
}

卷珠帘

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

 // Thread.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <WinSock2.h>
#include <Windows.h> #include <iostream>
using namespace std;
//类与线程,线程可以访问非全局变量,尤其是私有指针 class MyClass
{
public:
MyClass();
~MyClass();
int m_1;
protected:
int m_2;
private:
int m_3;
public:
static DWORD WINAPI ThreadProc(LPVOID Param); //线程不能所属一个类里,所以必须加关键字,static
VOID Sub_1()
{
HANDLE ThreadHandle = CreateThread(NULL, , (LPTHREAD_START_ROUTINE)ThreadProc, this, , NULL);
WaitForSingleObject(ThreadHandle, INFINITE);
}
}; MyClass::MyClass()
{
m_1 = ;
m_2 = ;
m_3 = ;
} MyClass::~MyClass()
{
} DWORD WINAPI ThreadProc(LPVOID Param);
int main()
{
MyClass Object;
Object.Sub_1();
return ;
} DWORD WINAPI MyClass::ThreadProc(LPVOID Param)
{
printf("%d\r\n", ((MyClass*)(Param))->m_3);
return ;
}

卷珠帘

强制性输出private中变量的三种方法的更多相关文章

  1. 转载:WinForm中播放声音的三种方法

    转载:WinForm中播放声音的三种方法 金刚 winForm 播放声音 本文是转载的文章.原文出处:http://blog.csdn.net/jijunwu/article/details/4753 ...

  2. MATLAB中多行注释的三种方法

    MATLAB中多行注释的三种方法 A. %{ 若干语句 %} B. 多行注释: 选中要注释的若干语句, 编辑器菜单Text->Comment, 或者快捷键Ctrl+R 取消注释: 选中要取消注释 ...

  3. 痞子衡嵌入式:在IAR开发环境下将关键函数重定向到RAM中执行的三种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将关键函数重定向到RAM中执行的三种方法. 嵌入式项目里应用程序代码正常是放在 Flash 中执行的,但有时候也需要将 ...

  4. jsp值传到后台Struts2中的action三种方法

    Action接收表单传递过来的参数有3种方法: 如,登陆表单login.jsp: <form action="login" method="post" n ...

  5. linux修改环境变量的三种方法【转】

    [环境变量配置的三个方法] 如想将一个路径加入到$PATH中,可以像下面这样做:  1. 控制台中,不赞成使用这种方法,因为换个shell,你的设置就无效了,因此这种方法仅仅是临时使用,以后要使用的时 ...

  6. JavaScript 复制变量的三种方法

    参考:Copying Objects in JavaScript - Orinami Olatunji(@orinamio_) October 23, 2017    直接将一个变量赋给另一个变量时, ...

  7. 交换两个变量的值,不借助第三个变量的 三种方法(JS实现)

    第一种:算术运算法 var a = 10; var b = 12; a = b - a; b = b - a; a = b + a; 它的原理是:把a.b看做数轴上的点,围绕两点间的距离来进行计算.具 ...

  8. SpringBoot学习笔记(5)----SpringBoot中异常处理的三种方法

    对于异常的处理,Spring Boot中提供默认的一个异常处理界面,如下图: 但是在实际的运用开发中,这样的页面显然是不友好的,Spring Boot也提供了自定义异常处理的方式,如下总结三种一场处理 ...

  9. Selenium获取input输入框中值的三种方法

    第一种用jQuery的val方法: js = "return $('input').val();" driver.execute_script(js) 第二种用jQuery的att ...

随机推荐

  1. 自定义alert和confirm

    var common = {}; common.showAlert = function (msg) { var html = "<div id='dialog_alert' clas ...

  2. websphere安装验证报错 忘记密码的配置

    http://blog.csdn.net/yulimin/article/details/4048897 ADMU7704E: 在尝试启动与服务器相关联的 Windows 服务时失败:server1: ...

  3. 十二、oracle 数据库(表)的逻辑备份与恢复

    一.介绍逻辑备份是指使用工具export将数据对象的结构和数据导出到文件的过程.逻辑恢复是指当数据库对象被误操作而损坏后使用工具import利用备份的文件把数据对象导入到数据库的过程.物理备份即可在数 ...

  4. Logger日志管理工具类

    import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...

  5. SNMP学习之结构体snmp_secmod_def

    此结构体中定义了各个回调函数,在函数init_ksm(E:\code\net-snmp-5.4.2.1\snmplib)中进行了初始化. void init_ksm(void) { struct sn ...

  6. ASP.NET MVC 使用TempData

    ASP.NET MVC的TempData用于传输一些临时的数据,例如在各个控制器Action间传递临时的数据或者给View传递一些临时的数据,相信大家都看过"在ASP.NET页面间传值的方法 ...

  7. 构造DataTable

    手动构造一个DataTable: DataTable dt = new DataTable(); dt.Columns.Add("ID", typeof(string)); dt. ...

  8. Light OJ 1136

    Division by 3. 发现一些规律: 一个数的数字和相加能被三整除,那么这个数也能被3整除.(1) 然后可以发现: 连续三个整数并排在一起组成的数的数字和必然能被3整除.(2) 最后通过(2) ...

  9. sublime 2

    just baidu sublime license and find a free one!

  10. C#连接Oracle的方法

    C#连接Oracle的方法 方法1: System.Data.OracleClient oracleConnectionString : data source = orcl;user id= sco ...