zoukankan      html  css  js  c++  java
  • 零基础逆向工程24_C++_01_类_this指针_继承本质_多层继承

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

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

    1.参数传递:成员函数多传一个this指针
    2.压栈顺序:成员函数会将this指针压栈,在函数调用取出
    3.堆栈平衡:普通函数是外平栈
    对比图如下:

    1.2 一段C++代码的分析

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

    struct Person
    {
    	int x ;
        void Fn_1()
    	{
    		printf("Person:Fn_1()
    ");
    	}
        void Fn_2()
    	{
    		x = 10;
    		printf("Person:Fn_2()%x
    ");
    	}
    };
    
    
    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 代码分析

  • 相关阅读:
    MFC的自定义消息(用户消息)的定义与使用
    队列的使用
    接私活平台
    下载图标网站
    C#对象序列化
    C#中控件对比(DataGridView,ListView,TreeView,ComboBox)
    C#反射
    C#可选实参和命名实参
    C#扩展方法
    Lambda表达式
  • 原文地址:https://www.cnblogs.com/flatcc/p/7629942.html
Copyright © 2011-2022 走看看