一、面向对象编程
笔者由于学习过JAVA,所以对面向对象编程已经有一些自己的理解,下面不会讲解太详细
1.结构体<=>类
-
先复习一下结构体作为参数传递:结构体作为参数传给函数,本质上是将结构体中所有成员复制一份传到函数的栈中。这样会比较浪费空间和时间
-
所以我们会将结构体指针作为参数传递给函数:
#include "stdafx.h" struct Base{ int x; int y; }; int Max(Base* basep){ //结构体指针传参 return basep->x + basep->y; } int main(int argc,char* argv[]){ Base base; base.x = 1; base.y = 2; printf("%d\n",Max(&base)); printf("%d",sizeof(base)); //打印一下结构体的大小 return 0; } -
这里我们查看一下现在结构体的大小:8字节。现在如果把Max函数放到Base结构体中,再看看是否报错,并且查看此时结构体的大小:
#include "stdafx.h" struct Base{ int x; int y; int Max(Base* basep){ //把Max函数放到Base结构体中 return basep->x + basep->y; } }; int main(int argc,char* argv[]){ Base base; base.x = 1; base.y = 2; printf("%d\n",base.Max(&base)); //这里调用函数时就需要用“结构体变量.”的方式调用 printf("%d",sizeof(base)); //打印一下结构体的大小 return 0; }- 函数作用范围受限:会发现完全可以把函数定义到结构体当中,但是在调用这个函数时需要把函数当成结构体中成员来调用:即
base.Max()的方式来调用! - 结构体中函数不影响结构体大小:且发现结构体大小还是8字节!即Max函数当做结构体成员使用,但是却不包含在结构体当中
- 函数作用范围受限:会发现完全可以把函数定义到结构体当中,但是在调用这个函数时需要把函数当成结构体中成员来调用:即
-
综上:可以发现和面向对象的编程语言很像!结构体就是类,结构体中的变量就是成员变量,结构体中的函数就是成员方法,使用
Base base可以创建类的对象base,使用对象可以调用类中的变量和方法等,这些就是封装的思想

文章介绍了C++中通过结构体模拟面向对象编程的概念,包括结构体与类的关联,成员方法的参数传递,特别是this指针的使用和作用。通过实例展示了成员方法如何在结构体中定义和调用,并解释了编译器在背后如何处理成员方法的调用,包括参数传递和调用约定。此外,还讨论了空结构体的大小以及空指针调用成员方法的情况,强调了this指针在函数执行中的重要性。
最低0.47元/天 解锁文章
1844

被折叠的 条评论
为什么被折叠?



