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 代码分析

  • 相关阅读:
    HDU 1114 Piggy-Bank
    HDU 2955 Robberies
    NTOJ 290 动物统计(加强版)
    POJ 3624 Charm Bracelet
    HDU 2602 Bone Collector
    POJ 1523 SPF(无向图割顶)
    HDU 5311 Hidden String
    HDU 1421 搬寝室
    HDU 1058 Humble Numbers
    POJ 3259 Wormholes(spfa判负环)
  • 原文地址:https://www.cnblogs.com/flatcc/p/7629942.html
Copyright © 2011-2022 走看看