C++为什么要让 struct 可以定义成员函数

因为C++的class真的只是个struct,只不过C++编译器会在编译期对它做一些“魔改”动作而已。最开始设计的时候,class就是struct,只是个语法糖,用来触发预处理器或者编译器的特定处理而已。或者说,C++的所有class相关功能,实际上就是在struct上实现的。

因为C++的class真的只是个struct,只不过C++编译器会在编译期对它做一些“魔改”动作而已。最开始设计的时候,class就是struct,只是个语法糖,用来触发预处理器或者编译器的特定处理而已。或者说,C++的所有class相关功能,实际上就是在struct上实现的。换句话说,C++作者一开始实现编译器的时候,class支持相关的代码已经直接写进了struct的代码中,之后的其它的C++实现,也就必须保持「struct其实就是一个class」的特性,不然会导致代码不兼容。

早年,诸如游戏业的精灵抽象、unix系的“一切皆文件”等设计思想,都是用C乃至汇编表现出来的。正是这些思想启发并引导了后来的面向对象热潮。

对C来说,struct可以放任何它支持的数据类型。包括函数指针——后来C++所谓的虚函数表,很多编译器的实现,就是一个指向另一个全局结构体的指针,这个全局结构体里面是一条一条的函数指针,指向对应类重载后的所谓“虚函数”。

至于各种所谓的成员函数,实际上就是些第一个参数是classXX类型的this指针的普通函数。

换言之,struct本身已经足以支持面向对象编程运行期需要的一切了;现在,我们只需要增加一些新的语法约定,使得编译器可以帮助用户自动维护这些琐碎细节就行了——这正是

Bjarne Stroustrup当年搞Cfront的设计思路: 先把C++代码自动魔改到C,然后调用C编译器完成编译。

后期虽然有了直接支持c++的编译器(因为在cfront中加入异常支持失败),但编译器关于struct的处理并没有本质的不同。

于是,所谓class,其实就是加了某些外部支持的struct——除了编译期可能会被编译器魔改的面目全非外,它和普通struct毫无差别。

延伸阅读:

什么是C++?

C++(c plus plus)是一种计算机高级程序设计语言,由C语言扩展升级而产生,最早于1979年由本贾尼·斯特劳斯特卢普在AT&T贝尔工作室研发。

C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计。 C++几乎可以创建任何类型的程序:游戏、设备驱动程序、HPC、云、桌面、嵌入式和移动应用等。 甚至用于其他编程语言的库和编译器也使用C++编写。

C++拥有计算机运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。

文章标题:C++为什么要让 struct 可以定义成员函数,发布者:小编,转载请注明出处:https://worktile.com/kb/p/39046

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编的头像小编
上一篇 2023年2月21日 上午2:21
下一篇 2023年2月21日 上午2:23

相关推荐

  • 伊犁工程项目管理公司有哪些部门

    伊犁工程项目管理公司的部门构成主要包括:项目管理部、财务部、人力资源部、市场营销部、采购部、质量安全部等。每个部门都有其特定的职能和工作任务,共同维持着公司的正常运转。下面,我们将对这些部门的主要职能和工作内容进行详细的介绍。 一、项目管理部 项目管理部是伊犁工程项目管理公司的核心部门,主要负责公司…

    2024年8月3日
    000
  • 成功的项目群管理方法有哪些

    成功的项目群管理方法包括:明确的目标设定、有效的沟通、灵活的资源分配、风险管理、持续的监控与评估、使用先进的工具。其中,明确的目标设定是最关键的一点。明确的目标设定不仅可以帮助团队保持一致的方向和动力,还能让每个成员清楚自己在项目中的角色和责任。这有助于提高整个项目群的效率和成功率。设定目标时,应确…

    2024年8月3日
    000
  • 物业智能化管理有哪些项目

    物业智能化管理的项目包括:智能安防系统、智能停车管理、楼宇自控系统、智能照明系统、智能电梯管理、智能门禁系统、环境监测与控制、能源管理系统、智能家居集成、物业管理平台等。其中,智能安防系统是物业智能化管理中尤为重要的一个项目。通过智能安防系统,可以实现对小区或办公楼的实时监控,保障住户和工作人员的安…

    2024年8月3日
    000
  • 停车管理费包含哪些项目

    停车管理费主要包含以下项目:车位租赁费、停车设施维护费、停车场维护费、停车场保安费、停车场管理费、公共设施占用费等。其中,车位租赁费是指用户使用停车场提供的车位所需支付的租金,其金额由车位的地理位置、面积大小等因素决定。停车设施维护费用于保障停车场内设施的正常使用,包括停车位标线、指示牌、照明设施等…

    2024年8月3日
    000
  • 项目管理岗位面试常见问题有哪些

    项目管理岗位面试常见问题通常包括:项目管理经验、团队管理技能、冲突解决能力、时间管理技巧、项目管理工具的使用。其中,项目管理经验是最为重要的一点。面试官通常会询问你曾经管理过的项目,包括项目的规模、复杂性以及你在项目中扮演的具体角色。你需要详细描述你的项目管理过程,包括项目的启动、计划、执行、监控和…

    2024年8月3日
    000

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部