image.pngimage.png

面向对象 与 面向过程

面向对象与面向过程的本质的区别

>面向过程:分析解决问题需要的步骤,用函数实现步骤,使用时依次调用即可。 简述:依次调用函数实现。->蛋炒饭,按步骤将米饭和鸡蛋混合在一起制作。 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展 >面向对象:构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。 简述:按对象划分实现。->盖浇饭,分别做好米饭和菜,盖上去即可。 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
缺点:性能比面向过程低

(8)方法的定义、调用与调试 - 图3

方法的由来

image.png
● C面向过程,C++面向对象,C#面向对象。
>简易模式下:根据以下结果,为什么说C++是面向对象的呢?

此处C++的Add()为全局函数,并非方法。

image.pngimage.png
>回答:当一个函数以类的成员出现的时候,就被称为方法。(这也是为什么方法别名叫成员函数
image.png

.h是头文件,是对类的声明;.cpp是c++源文件,是对类的定义。

image.pngimage.pngimage.png
Student.h Student.cpp C++对方法的定义和调用

方法的声明与调用

image.png

Java首字母小写(驼峰法);C#所有单词首字母大写(帕斯卡法)。

构造器(特殊的方法<函数>)

image.png

①当声明一个类之后,没有为其准备构造器,编译器会自动准备一个默认的构造器。 ②构造器不需要返还结果,只需要构造自己的内存块。 ③带参数构造器:强制使用带参数构造器,不能用默认构造器。 ④除了参数构造器,仍然需要默认构造器怎么办?再写一个呗

image.pngimage.png
系统生成默认构造器 自定义构造器
image.png拓展:VS中输入image.png后,按两下Tab键,即可快速创建构造器
带参数构造器
●构造器的内存原理:
(1)默认构造器
image.png
(2)带参数构造器
1656139926417.png

方法的重载

image.png

①泛型、ref、out等,甚至实例构造器都可以有相关重载。 ②怎么执行重载呢?根据参数类型等自动决策。

image.png

如何对方法进行Debug?

image.png
●设置断点,调试模式运行(VS快捷键F5),程序会运行到断点地方等待观察。
image.png(断点标志)image.png(调试模式运行到哪标志)
●Call stack(调用栈)

调用栈越深,在内存栈占用资源越多。

1656157917163.png
image.png 全部中断 | 停止调试 | 重新启动 | 显示下一条语句 | 逐语句 | 逐过程 | 跳出

方法的调用与栈

image.png

Stack frame:指方法在被调用的时候,它在栈内存中的布局。

案例解析:方法调用与栈内存的映射关系

①从栈底开始 ②谁调用,归谁负责 √ ③先压左边的形参,再压右边的形参 ④返回值一般存在CPU寄存器上面(特殊情况:寄存器存不上就会在栈上开辟空间) ⑤函数执行完,栈返回值,Call stack(调运栈)少一层,占用内存清空。

image.png
image.png
image.png
image.png
1656160343851.png 先压左边的形参,再压右边的形参。
image.png