1 类内的成员函数和普通函数的对比

1.1 主要是从参数传递、压栈顺序、堆栈平衡来总结.

1.参数传递:成员函数多传一个this指针

2.压栈顺序:成员函数会将this指针压栈,在函数调用取出

3.堆栈平衡:普通函数是外平栈

对比图如下:

1.2 一段C++代码的分析

这段代码单步会到哪里异常?为什么?

struct Person
{
int x ;
void Fn_1()
{
printf("Person:Fn_1()\n");
}
void Fn_2()
{
x = 10;
printf("Person:Fn_2()%x\n");
}
}; int main(int argc, char* argv[])
{
Person* p = NULL; p->Fn_1();
p->Fn_2(); return 0;
}

分析:此段代码会成功输出Person:Fn_1(),但在运行p->Fn_2();时出现异常,原因是,在进行x=10;的赋值操作时,类指针为NULL,访问空指针而导致错误,见下图:

1.3 this指针的特点

1.this指针不能做++ -- 等运算,不能重新被赋值.

2.this指针不占用结构体的宽度.

2 继承

2.1 小结

1.继承是数据复制的技术

2.减少重复代码的编写

3.一个父类指针可以指向子类对象是被允许的,是安全的

4.多重继承增加了程序的复杂度,容易出错

5.微软建议使用单继承,如果需要多重继承可以改为多层继承

2.2 代码分析

零基础逆向工程24_C++_01_类_this指针_继承本质_多层继承的更多相关文章

  1. 零基础逆向工程25_C++_02_类的成员权限_虚函数_模板

    1 类的成员权限 1.1 小结: 1.对外提供的函数或者变量,发布成public的 但不能随意改动. 2.可能会变动的函数或者变量,定义成private的 这样编译器会在使用的时候做检测. 3.只有结 ...

  2. Yaf零基础学习总结5-Yaf类的自动加载

    Yaf零基础学习总结5-Yaf类的自动加载 框架的一个重要功能就是类的自动加载了,在第一个demo的时候我们就约定自己的项目的目录结构,框架就基于这个目录结构来自动加载需要的类文件. Yaf在自启动的 ...

  3. 零基础逆向工程20_PE结构04_任意节空白区_新增节_扩大节添加代码

    向代码节添加代码实现 作者经过一周不断的失败,再思考以及无数次调试终于实现. 思路:八个步骤 1. 文件拷到文件缓冲区(FileBuffer) //图示见(零基础逆向工程18之PE加载过程) 2. 文 ...

  4. 零基础逆向工程14_C语言08_指针02_反汇编

    1.指针数组 5: char* keyword[] = {"if", "for", "while", "switch"} ...

  5. 零基础逆向工程13_C语言07_指针01_反汇编

    1."带*类型"的特征探测 宽度 在同一个平台下,任何指针变量的尺寸都是一样的(都等于系统字长),如在32位平台中任何类型指针宽度都是32位. 声明 1.带有* 的变量类型的标准写 ...

  6. 零基础逆向工程33_Win32_07_创建线程

    1 什么是线程(Threads)? 什么是多线程? 怎么在windows中观察多线程? 线程可以简单理解为主程序为解决一个问题而选择的其中一条路线. 同理,多线程就是同时选择不同的路线来解决此问题. ...

  7. 零基础逆向工程31_Win32_05_提取图标_修改标题

    在程序中使用图标 1.加载图标 HICON hIcon; hIcon = LoadIcon (hAppInstance, MAKEINTRESOURCE (IDI_ICON)); hAppInstan ...

  8. 零基础逆向工程30_Win32_04_资源文件_消息断点

    1 资源文件,创建对话框 详细步骤: 1.创建一个空的Win32应用程序 2.在VC6中新增资源 File -> New -> Resource Script 创建成功后会新增2个文件:x ...

  9. 零基础逆向工程28_Win32_02_事件_消息_消息处理函数

    1 第一个图形界面程序 步骤1:创建Windows应用程序 选择空项目 步骤2:在新建项窗口中选C++代码文件 创建一个新的cpp文件 步骤3:在新的cpp文件中添加:#include <Win ...

随机推荐

  1. R语言中的字符处理

    R语言中的字符处理 (2011-07-10 22:29:48) 转载▼ 标签: r语言 字符处理 字符串 连接 分割 分类: R R的字符串处理能力还是很强大的,具体有base包的几个函数和strin ...

  2. R: data.frame 数据框的:查询位置、排序(sort、order)、筛选满足条件的子集。。

    ################################################### 问题:数据框 data.frame 查.排序等,   18.4.27 怎么对数据框 data.f ...

  3. 28、cd-hit去除冗余序列

    转载:http://blog.sina.com.cn/s/blog_670445240101nidy.html 网址:http://cd-hit.org :http://www.bioinformat ...

  4. Hashtable类中的四种遍历方法对比

    要遍历一个Hashtable,api中提供了如下几个方法可供我们遍历: keys() - returns an Enumeration of the keys of this Hashtable ke ...

  5. Asp.Net 遍历 循环 显示所有COOKIS,SESSION,Applocation

    在C#中循环显示SESSIOn: Response.Write("<br>Session的所有值:<br>"); foreach (string obj i ...

  6. Eclipse插件无法识别的解决方法汇总

    参考 http://www.cnblogs.com/apollolee/archive/2013/06/18/3142243.html

  7. Vue中使用jquery

    在vue项目中,需要实现某些特定的功能时,使用mvvm模式不易实现.因此引入jquery包来完成需求 npm install jqueryimport $ from jquery //在需要使用的页面 ...

  8. OpenStack基础知识-项目打包的步骤

    学习过包管理相关的知识后,我们就要以OpenStack的方法来创建一个我们自己的项目.这个项目的名称是webdemo,就是一个简单的web服务器.这个项目会贯穿这个系列文章.在本文中,我们首先要创建w ...

  9. Educational Codeforces Round 64 (Rated for Div. 2)D(并查集,图)

    #include<bits/stdc++.h>using namespace std;int f[2][200007],s[2][200007];//并查集,相邻点int find_(in ...

  10. go语言web开发框架_Iris框架讲解(五):MVC包使用

    在Iris框架中,封装了mvc包作为对mvc架构的支持,方便开发者遵循mvc的开发原则进行开发. iris框架支持请求数据.模型.持久数据分层处理,并支持各层级模块代码绑定执行. MVC即:model ...