C++的class与struct到底有什么不同

C++的class与struct的不同点:1、类型不同;2、存储不同;3、成员属性不同;4、继承不同;5、能否使用模板。类型不同是指,struct是实值类型(Value Types),而class则是引用类型(Reference Types)。

一、C++的class与struct的不同点

1、类型不同

class:class是引用类型(Reference Types);

struct:struct是实值类型(Value Types)。

2、存储不同

class:class使用堆存储(Heap Allocation);

struct:struct使用栈存储(Stack Allocation)。

3、成员属性不同

class:使用 class 时,类中的成员默认都是 private 属性的;

struct:;使用 struct 时,结构体中的成员默认都是 public 属性的。

4、继承不同

class:class 继承默认是 private 继承;

struct:struct 继承默认是 public 继承。

5、能否使用模板

class:class 可以使用模板;

struct:struct 不能使用模板。

二、C++的class

class,即类。类在面向对象编程中是一种面向对象计算机编程语言的构造,是创建对象的蓝图,描述了所创建的对象共同的属性和方法。类的更严格的定义是由某种特定的元数据所组成的内聚的包。它描述了一些对象的行为规则,而这些对象就被称为该类的实例。类有接口和结构。接口描述了如何通过方法与类及其实例互操作,而结构描述了一个实例中数据如何划分为多个属性。类是与某个层[注 1]的对象的最具体的类型。类还可以有运行时表示形式(元对象),它为操作与类相关的元数据提供了运行时支持。

类是用户自定义的类型,如果程序中要用到类,必须提前说明,或者使用已存在的类(别人写好的类、标准库中的类等),C++语法本身并不提供现成的类的名称、结构和内容。

class的定义示例:

class Student{
public:
    //成员变量
    char *name;
    int age;
    float score;

    //成员函数
    void say(){
        cout<<name<<"的年龄是"<<age<<",成绩是"<<score<<endl;
    }
};

整体上讲,上面的代码创建了一个 Student 类,它包含了 3 个成员变量和 1 个成员函数。

class是 C++ 中新增的关键字,专门用来定义类。Student是类的名称;类名的首字母一般大写,以和其他的标识符区分开。{ }内部是类所包含的成员变量和成员函数,它们统称为类的成员(Member);由{ }包围起来的部分有时也称为类体,和函数体的概念类似。public也是 C++ 的新增关键字,它只能用在类的定义中,表示类的成员变量或成员函数具有“公开”的访问权限,注意在类定义的最后有一个分号;,它是类定义的一部分,表示类定义结束了,不能省略。

三、C++的struct

在C/C++中,struct是指结构体,结构体是用户定义的数据类型。结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型。第二,相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称是常量指针,所以不可以做为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同。

结构体语法:

struct 结构体名{
    结构体成员列表
};

通过结构体创建变量的方式:

  • struct 结构体名 变量名
  • struct 结构体名 变量名={成员1值,成员2值…}
  • 定义结构体时顺便创建变量

结构体的作用

  • 在实际项目中,结构体是大量存在的。研发人员常使用结构体来封装一些属性来组成新的类型。由于C语言内部程序比较简单,研发人员通常使用结构体创造新的“属性”,其目的是简化运算。
  • 结构体在函数中的作用不是简便,最主要的作用就是封装。封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。

结构体的对齐方式:

各成员变量在存放的时候根据在结构中出现的顺序依次申请空间,同时按照上面的对齐方式调整位置,空缺的字节VC会自动填充。同时VC为了确保结构的大小为结构的字节边界数(即该结构中占用最大空间的类型所占用的字节数)的倍数,所以在为最后一个成员变量申请空间后,还会根据需要自动填充空缺的字节。

注意:VC对变量存储的一个特殊处理。为了提高CPU的存储速度,VC对一些变量的起始地址做了“对齐”处理。在默认情况下,VC规定各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。

延伸阅读

C和C++中的结构体的不同之处

在C语言中,结构体不能包含函数。在面向对象的程序设计中,对象具有状态(属性)和行为,状态保存在成员变量中,行为通过成员方法(函数)来实现。C语言中的结构体只能描述一个对象的状态,不能描述一个对象的行为。在C++中,考虑到C语言到C++语言过渡的连续性,对结构体进行了扩展,C++的结构体可以包含函数,这样,C++的结构体也具有类的功能,与class不同的是,结构体包含的函数默认为public,而不是private。

文章标题:C++的class与struct到底有什么不同,发布者:Z, ZLW,转载请注明出处:https://worktile.com/kb/p/49395

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Z, ZLWZ, ZLW认证作者
上一篇 2023年4月15日
下一篇 2023年4月15日

相关推荐

  • oa类软件

    标题:OA类软件的特点及影响 摘要:OA(Office Automation)类软件作为提高办公效率和质量的工具,展现出集成化、自动化、协同作用与易用性等特性。集成化表示多功能的集合,如文字处理、数据管理等。具有集成性的工具有助于降低成本、减少操作复杂性,同时增强企业内部协作。例如,集成化允许员工在…

    2024年1月11日
    20800
  • DevOps和SRE(站点可靠性工程)的比较

    在当代快速变化的技术环境中,DevOps和SRE (站点可靠性工程)是两种引领行业的方法论,它们各自有着独特的核心原则和实践。DevOps的核心观点包括1、促进开发与运维团队的协作;2、快速且频繁的代码部署;3、持续交付和自动化流程。SRE则强调1、将软件工程原则应用于运维任务;2、定义服务等级目标…

    2023年12月13日
    35900
  • 采购部如何管理项目部员工

    采购部管理项目部员工的要点包括:确立明确的沟通框架、构建协作平台、明确角色职责、实施有效监控、提供持续培训、加强绩效评估。其中,确立明确的沟通框架 对于跨部门的高效管理尤为重要,这涉及到制定清晰的信息传达路径、定期的会议安排以及在必要时快速解决冲突的流程机制。通过设定沟通标准和频率,不仅有助于采购部…

    2024年4月11日
    7200
  • 用什么软件编程

    编程软件的选择取决于编程语言、项目需求、程序员偏好等多种因素。常见的编程软件有:1、集成开发环境(IDE),2、文本编辑器,3、编译器和4、调试器。IDE,如Visual Studio、IntelliJ IDEA和Eclipse,提供了代码编辑、编译和调试一体化的功能,非常适合大型项目开发。IDE为…

    2024年4月25日
    900
  • void与int的区别是什么

    void与int的区别在于以下几个方面:1、void和int的指代不同;2、作用不同。其中,void和int的指代不同是指,int是一种数据类型,它是定义整数变量的标识符,可以用来定义整数类型的变量。 一、区别 1、void和int的指代不同。 int是一种数据类型,它是定义整数变量的标识符,可以用…

    2023年2月21日
    2.6K00
  • 社交型知识库有哪些平台

    社交型知识库是结合社交网络和知识管理功能的在线平台,它们有效促成了信息的共享与个人间互动。目前,1、Quora、2、Stack Exchange、3、Reddit、4、Zhihu以及5、LinkedIn Learning是该领域的一些主要平台。这些平台促进了专业知识的交流,支持用户通过提问、回答、讨…

    2023年11月15日
    57100
  • 科技创新项目管理系统有哪些

    科技创新项目管理系统有:一、Worktile;二、PingCode;三、用友协同云;四、泛微项目协同工具;五、广联达项目管理软件;六、泛普OA;七、新中大;八、红圈CRM;九、zoho Projects。Worktile 是国内一款知名项目管理软件,能够支持工程项目管理、市场活动、研发、电商等项目等…

    2023年4月16日
    44500
  • vscode为什么自己编译代码

    VSCode (Visual Studio Code) 自己编译代码的原因主要是因为它的轻量级、功能扩展性强、多语言支持、方便调试。特别是其功能扩展性强,是VSCode成为编程社区青睐工具的重要原因。通过安装各种插件,VSCode能够支持从简单的文本编辑到复杂的编程语言编译、调试、以及版本控制等一系…

    2024年4月3日
    8800
  • 前端性能测试包括哪些

    前端性能测试包括:1、启动时间;2、CPU;3、流量;4、电量;5、内存;6、FPS(每秒钟的帧数);7、过度渲染.。启动时间主要测试app在启动过程中的耗时情况。 一、前端性能测试 二、前端测试的类型 1、单元测试 在修复bug或添加一点功能时,软件的其他部分可能会停止工作。为了处理这种情况,单元…

    2023年1月15日
    88100
  • 编程先学习什么

    编程首先应学习以下基础知识内容:1、编程逻辑和算法;2、基础的编程语法;3、开发环境的搭建;4、版本控制系统;5、数据结构;6、学习一个或多个编程语言。在这些基础之上,建议从实际项目出发,不断巩固和提升编程技能。 对于编程逻辑和算法这一点,理解并熟悉逻辑思维和基础算法是编程的基石。无论编写何种程序,…

    2024年4月25日
    1400

发表回复

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

400-800-1024

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

分享本页
返回顶部