C++ 中结构体与类的区别

2025年6月6日 | 阅读 7 分钟

C++ 是一种面向对象的编程语言,它重视数据及其管理方式。通过允许开发人员将内存划分为不同的部分来存储数据和函数,它鼓励模块化编程。C++ 中的结构体和类都允许创建自定义数据类型,然后可以使用这些类型来创建实例或对象。

结构体和类在很多方面都很相似,但在操作上却有显著的区别。在探讨这些区别之前,了解 C++ 结构体和类的基本概念会很有帮助。

C++ 中的结构体是什么?

在 C++ 中,结构体是一种用户定义的数据类型,它允许将不同类型变量组合在一个共同的名称下。它的工作方式类似于其他编程语言中的记录,可以用来表示具有多个属性的现实世界实体。与数组相比,结构体的一个基本优势在于它可以包含多种类型的变量,而数组只能存储相同数据类型的元素。

它提高了处理更复杂数据的能力。结构体内的每个变量都称为成员,可以通过结构体名称和点运算符来访问。结构体仅在创建其实例时占用内存。一旦形成,其所有成员都存储在相邻的内存位置,以便快速访问。

C++ 结构体可以包含以下内容:

  • 数据成员: 这是结构体内组合在一起的各种类型的变量。
  • 成员函数: 在 C++ 中,结构体(与类一样)可以拥有允许封装数据行为的函数。

语法

它具有以下语法:

参数

  • struct: "struct" 关键字用于定义结构体。
  • StructureName: 分配给结构体类型的名称。它充当创建结构体变量(实例)的蓝图。
  • 数据成员: 这些是在结构体内定义的变量,可以是任何数据类型。
  • 成员函数(可选): 类似于类的成员函数,C++ 结构体也可以包含操作数据成员的函数。

C++ 结构体示例

让我们看一个例子来说明 C++ 中的结构体。

示例

编译并运行

输出

The name of the student is: Joseph
The Roll Number of a student is: 1
Marks of the student is: 95.5

说明

在此示例中,我们创建了一个 Student 结构体,用于存储学生的学号、姓名和分数,并有一个 display() 函数来打印它们。在 main() 函数中,先初始化 Student 对象并赋值,然后调用 display() 函数来显示数据。

C++ 类是什么?

在 C++ 中,类是一种由用户定义的数据类型,它充当创建对象的蓝图。它具有数据成员(属性)和成员函数(方法),这些成员函数决定了对象的状态和行为。

例如,考虑 Dog 类,每只狗的品种和颜色可能不同,但它们都具有物种和一般行为等共同特征。这些共享的属性由类定义,而单独的类对象则代表具体的狗。

语法

它具有以下语法:

参数

  • class: 类使用 "class" 关键字定义。
  • ClassName: ClassName 是类的标识符或名称。
  • 私有数据成员: 私有成员只能在类内部访问。
  • 公共函数: 公共函数允许对类的内部成员进行受控访问。
  • 成员函数: 成员函数定义了可以对类数据执行的操作。

C++ 类示例

让我们看一个例子来说明 C++ 中的类。

示例

编译并运行

输出

The brand name is: Toyota
The launch year is: 2020

说明

在此示例中,我们创建了一个 Car 类,它有两个同名的成员函数:一个用于设置汽车的品牌和年份,另一个用于打印它们。main() 函数创建一个 Car 对象 c,初始化其数据,然后显示存储的信息。

C++ 中结构体和类的相似之处

尽管结构体和类在 C++ 中经常以不同的方式使用,但由于该语言的面向对象设计,它们共享许多基本特征。以下是显示这两种用户定义类型之间密切关系的主要相似之处:

语法等价性

在 C++ 中,结构体和类都使用相同的基本语法进行声明。唯一的语法区别是默认的访问修饰符,结构体默认为 public,而类默认为 private。

可用作数据类型

无论是创建结构体还是类,其名称都可以用作数据类型来生成变量或对象。例如,Student(一个结构体)和 Employee(一个类)都可以像内置类型一样用于定义实例。

支持访问说明符

结构体和类都允许使用 public、private 和 protected 等访问说明符。这意味着结构体默认是 public 的,但它们也可以包含私有成员,就像类一样。

支持继承

结构体和类都提供继承,这是面向对象编程的一个重要组成部分。我们可以从一个结构体或类派生出另一个,从而实现代码复用和分层架构。

构造函数和成员函数

C++ 结构体(与类一样)可以拥有构造函数、析构函数和成员函数。这使得结构体在对象初始化和行为方面可以像类一样运行。

C++ 中结构体和类的主要区别

Differences between Structure and Class in C++

下表总结了 C++ 中结构体和类之间的所有基本区别:

方面结构Class
默认访问修饰符成员默认是 public。成员默认是 private。
访问说明符行为结构体默认暴露其数据,这意味着除非另行指定,否则没有封装。类通过隐藏数据(除非明确授予访问权限)来鼓励封装。
声明关键字使用 "struct" 关键字声明。使用 "class" 关键字声明。
目的主要用于将相关联的不同类型变量分组。主要用于数据抽象、继承和面向对象设计。
语法struct StructureName { member1; member2; };class ClassName { member1; member2; };
实例名称结构体实例通常称为结构体变量。类实例称为对象。
默认初始化结构体成员除非显式初始化或通过构造函数初始化,否则不会自动初始化。需要构造函数来初始化成员。
析构函数支持在 C++ 中,结构体就像类一样支持析构函数。它同时支持构造函数和析构函数。
空值结构体可以包含指针,指针可以为空。类指针允许空值。
继承和多态在 C++ 中,结构体像类一样完全支持继承和多态。它完全支持继承和多态。
构造函数和析构函数结构体可以拥有构造函数和析构函数,但不是默认的。类明确支持用户定义的构造函数和析构函数。
封装级别低封装,因为所有成员默认都是 public 的。高封装,支持数据隐藏和访问控制。
类型行为它被视为按值复制的值类型。它被视为按引用访问的引用类型。
用例它更适合用于小型程序或数据分组任务。它更适合用于大型面向对象软件系统。

结论

总之,C++ 中,结构体用于简单的数据分组,内存需求低,因为它是一种易于使用的值类型。在处理更复杂的逻辑时,应考虑使用类,因为它提供了更好的数据安全性,支持继承,并且是一种引用类型。结构体对于简单任务很有用,但在大型系统中,类提供了更多的控制和灵活性。

C++ 中结构体和类的区别 选择题

1) C++ 结构体的默认访问修饰符是什么?

  1. 私有
  2. Protected
  3. 公共
  4. 内存
 

答案: c) Public。


2) 在 C++ 中,声明类使用哪个关键字?

  1. struct
  2. typedef
  3. enum
  4. class
 

答案: d) class


3) 在 C++ 中,以下哪个接受构造函数和析构函数?

  1. 仅类
  2. 仅结构体
  3. 结构体和类都支持
  4. 都不支持
 

答案: c) 结构体和类都支持


4) 以下关于 C++ 结构体的说法哪个是正确的?

  1. 支持继承
  2. 通常用于分组相关数据
  3. 是引用类型
  4. 成员默认是 private 的
 

答案: b) 通常用于分组相关数据。


5) 当声明为局部变量时,结构体变量存储在哪里?

  1. Stack
  2. 寄存器
  3. 缓存
 

答案: a) 栈