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年4月10日
    9400
  • 为什么开源很重要

    开源很重要的原因在于:这种知识共享和集体创新使整个社区受益。将技术锁定在专利、版权和昂贵的许可之后会限制进步。在过去几十年里,许多流行的开源项目促进了全球技术的快速进步。 为什么开源很重要? 开源的想法源于技术社区。技术创新需要全球协作才能发展。例如,假设美国的一个编程团队为金融应用程序开发新的开源…

    2022年11月8日
    40900
  • 综合办公oa系统

    综合办公OA系统主要为企业提供电子文档管理、工作流程审批、协同办公、项目管理、资源分享等功能,以提高工作效率、加强团队协作、优化内部管理流程。1、提供电子文档管理、2、支持工作流程审批、3、促进协同办公、4、简化项目管理、5、实现资源共享等重要特性。对电子文档管理进行详尽阐述:该系统允许用户创建、修…

    2024年1月15日
    23000
  • 如何加强施工项目内部管理

    施工项目的内部管理是确保施工质量、工期和成本控制的关键因素。加强施工项目内部管理主要包括:制定详细且实用的项目计划、建立严格的质量控制体系、执行有效的成本控制、优化人力资源管理、采用现代信息技术、加强供应链协同、保障安全生产以及进行持续的员工培训和教育。其中,制定详细且实用的项目计划是基石,因为它确…

    2024年4月10日
    5600
  • java教务管理系统设计

    标题: Java 教务管理系统设计 摘要: Java 教务管理系统设计应包括1、系统架构设计,2、功能模块规划,3、数据库设计,4、用户界面设计,5、安全性考虑。在这些要素中,系统架构设计占了主导地位,它涉及如何构建系统以支持高效、可靠地处理教务管理任务。详细考虑该部分,它必须能同时应对大量数据操作…

    2024年1月9日
    19800
  • 如何在不同文化背景下进行全球市场营销

    摘要:在不同文化背景下进行全球市场营销涉及综合应用多种策略以适应多元文化环境。核心观点包括1、文化敏感性与适应性、2、本地化策略、3、全球一体化与差异化平衡、4、跨文化沟通技能、5、持续的市场研究。首先,文化敏感性与适应性强调企业必须对不同文化背景的市场保持敏感,并采取灵活的营销方式适应当地文化。其…

    2023年11月27日
    45100
  • 什么是面向接口编程

    在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了;而各个对象之间的协作关系则成为系统设计的关键。 一、什么是面向接口编程 在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种…

    2023年7月28日
    50100
  • 泛微oa系统运维

    标题:泛微OA系统运维实践概览 泛微OA系统作为企业日常办公自动化的核心平台,其运维工作对保障业务流程的连续性与高效性至关重要。1、系统监控与预警、2、数据备份与恢复、3、性能优化、4、安全管理。专注于数据备份与恢复措施,实施定期备份策略,确保关键数据通过多重备份,并能够迅速恢复,以此降低数据丢失或…

    2024年1月15日
    34400
  • c语言中双反斜杠“\\”代表什么

    c语言中双反斜杠“\\”在windows里表示绝对地址的名列前茅项,后面跟IP地址或计算机名,就是需要打开这个IP地址或计算机名对应主机的网络共享资源。 双反斜杠“\\” “\\”在windows里表示绝对地址的名列前茅项,后面跟IP地址或计算机名,就是需要打开这个IP地址或计算机名对应主机的网络共…

    2023年4月13日
    2.3K00
  • 如何搞好项目投资管理

    项目投资管理是确保项目投资达到既定目标的过程,它要求对投资项目进行周全的规划、执行、监控和收盘。项目选择与评估、资金管理、风险控制、项目绩效评估和投资决策是该领域的关键组成部分。尤其在项目选择与评估阶段,需要对潜在项目进行全面分析,包括市场需求、预期收益、成本估算和风险评估,这一阶段的准确性直接决定…

    2024年4月10日
    6300

发表回复

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

400-800-1024

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

分享本页
返回顶部