班(class)和结构(struct)的区别

在理解类和结构之间的区别之前,我们应该先了解一些与它们相关的基本概念。如果不理解概念,就很难理解两者之间的区别。...

班(class)和结构(struct)的区别

在理解类和结构之间的区别之前,我们应该先了解一些与它们相关的基本概念。如果不理解概念,就很难理解两者之间的区别。

什么是类和对象:(class and object:)?

这是与面向对象编程相关的两个重要概念,它们构成了构建函数和向其他函数传递数据的基础。为了更好地理解,我们可以把它与现实生活中的例子联系起来。一个类可以被视为一个商店,而一个对象可以是任何一个单独的、特定的商店,如杂货店、文具店、水果店等。所有对象都共享主类——商店——的共同属性,反过来,这些对象也可以通过对象拥有自己的专有属性,如特定的设计、照明等,我们可以实际使用这个类;它们构成类的实例。

类的语法

Class Store {

public string things;

public string design;

}

对象的语法

Store grocery = new Store();

Store Stationery = new Store();

什么是结构(a struct)?

一个结构只包含数据,因此它有助于通过结构对象来构建各个数据需求。与类不同,它缺少函数。其语法如下:

struct grocery_entrance{

char entrance_name[50];

int entrance_size;

} grocery_entrance;

所有商店都可以使用结构'入口'与个人的名称和大小。

什么是继承(inheritance)?

这类似于儿子继承父亲的财产,反过来,儿子也可以增加自己的一些其他财产。类可以是基类,也可以是派生类,其中前者可以作为基类来形成后者。派生类除了从基类获得的属性外,很少为自己添加其他属性。考虑上述示例时,杂货店仍然可以派生到特定的杂货店,例如XYZ杂货店。

既然我们已经熟悉了基本概念,我们就可以深入了解类和结构之间的实际区别了。

它们有何不同?

  • 可重用性:当类构成基本框架时,它们可以被重用;但是,结构是具有特定属性的单个元素,因此不能重复使用。例如,杂货店类可以用于任何类型的杂货店,但是Struct screery\u入口仅针对这一类是特定的,在其他类中重用它是没有意义的。
  • 可见性:类中的所有函数都对其对象公开可用。例如,我们在“store”类下有一个名为“things”的函数。函数“things”对其所有对象都是可见的,例如“杂货店”、“文具店”等。这种可见性在结构中是不可能的,因为结构的数据仅限于自身,而对其他结构不可见。为了说明这一点,我们可以说“杂货店进门”的数据并不是所有其他商店都能公开看到的。
  • pas**yreference和pas**yvalue:pas**yreference只向函数发送内存位置,而不是实际数据。这意味着每当值发生变化时,变化都会反映在相应的函数中。而传递值则只是将值发送给函数。在这种情况下,发送后值的更改不会反映在函数中。类使用按引用传递,结构使用传递值。
  • 继承:类可以进一步继承以形成子类,但结构不能利用继承。例如,类Store将其函数赋予子类“杂货店”。但是结构'u entrance'不能继承任何函数。我们可以说这里没有子结构这样的概念。
  • 默认可见性:默认情况下,类的所有成员保持为私有实体,而结构的成员保持为公共实体。
  • 空类和Struct:Class的大小即使为空也使用1字节的大小,而Struct为空时从不使用任何内存。这意味着我们可以说空结构的大小等于0字节。
  • 垃圾收集:类可以进行垃圾收集,因为它们使用按引用传递。因此,在一个存储数据的位置进行清理更容易。另一方面,Struct不可能进行垃圾收集,因为它使用传递值,并且数据分散在不同的位置。
  • 内存管理:因为类允许垃圾收集,所以内存管理也是有效的;但是,对于Structs来说并不是那么有效。
  • 构造函数:构造函数通常用特定的值初始化类。我们可以把它看作是用值初始化的东西。如果必须创建一个新类,则调用构造函数为该实例分配内存。我们甚至可以在调用构造函数时将值作为参数传递。现在让我们来进行实际的讨论。类允许所有类型的构造函数,例如带参数或不带参数的构造函数,而结构只允许带参数的构造函数,即参数化构造函数。
  • 析构函数:每当我们需要删除类的实例时,就会调用析构函数。析构函数依次删除该实例并释放内存。类可以使用析构函数,而结构不能。
  • 成员变量初始化:在类中,我们可以直接初始化成员变量;这种初始化在结构中是不可能的。
  • 对象创建:在类中创建对象的一般语法是:

Demo obj=新建Demo();

这意味着在创建类的对象时必须使用关键字“new”。在创建结构的对象时,这不是必需的。看看它们的语法:

演示对象;

即使没有“new”关键字,它也能完美地工作。

何时使用类,何时使用结构?

由于类在一起处理数据和函数方面更加灵活,所以当所使用的对象复杂且庞大时,我们可以使用它。在我们的示例中,Mall可以使用类“store”以更好的方式表示系统。然而,结构仅限于较小的对象,因为它们的效率相对低于类。因此,如果你自己设计一个商店,结构是更好的选择。

如何将结构转换为类,反之亦然?

您可能听说过术语“装箱”和“取消装箱”将结构转换为类,反之亦然。虽然这些都是有效的过程,以帮助我们在转换,他们应该小心处理。由于这直接影响到内存的位置,对系统的性能有很大的影响。此外,它还会影响垃圾收集过程,导致整个系统效率低下。因此,仅在需要时才使用这些转换。

让我们以表格的形式来看上述差异。

序号 概念 差异
等级 结构
1 可重用性 完全可重复使用 不可重复使用
2 能见度 类的所有函数对其对象都是可见的 结构的对象的数据对同一结构的其他对象不可见
按引用传递和按值传递 使用按引用传递 使用传递值
4 继承 一个类的函数可以被它的子类继承;允许继承 从不允许继承
5 默认可见性 默认情况下,类的所有成员都是私有的 默认情况下,结构的所有成员都是公共的
6 空时的大小 空类的大小为1字节 空结构的大小为0字节
7 垃圾收集 由于它使用按引用传递,所以可以进行垃圾收集 因为它使用传递值,所以不可能进行垃圾收集
8 内存管理 垃圾收集过程的简单性有助于有效的内存管理 缺少垃圾收**导致内存管理不善
9 施工人员 允许所有类型的构造函数,例如带参数或不带参数 只允许参数化构造函数
10 析构函数 我可以用它 不能使用它
11 成员变量初始化 允许直接初始化成员变量 不允许成员变量的直接word初始化
12 对象创建 在创建对象时必须使用关键字“new” 在对象创建期间使用关键字“new”是可选的
13 何时使用? 对于需要继承的较大和复杂对象更好 对于较小和更简单的对象,继承不那么重要。

我们几乎涵盖了类和结构之间的所有差异,如果您觉得缺少某些内容,请告诉我们。让我们一起学习,充分利用这些知识!

  • 发表于 2021-06-25 00:32
  • 阅读 ( 217 )
  • 分类:IT

你可能感兴趣的文章

班(class)和实例变量(instance variables)的区别

关键区别–类与实例变量 大多数现代编程语言都支持面向对象编程。对象包含数据或属性。一个物体有一定的行为。它们被称为方法。程序可以使用对象建模。软件是程序的集合。因此,可以使用对象来设计和实现软件。对...

  • 发布于 2020-10-19 16:54
  • 阅读 ( 302 )

班(class)和结构(c)#(structure in c#)的区别

关键区别——c语言中的类与结构# C是微软开发的一种现代的、通用的、高级的编程语言。它是一种类似于Java的编程语言。它包含强大的编程功能,如委托、索引器和语言集成查询。C的主要优点是它支持面向对象编程(OOP)...

  • 发布于 2020-10-19 17:15
  • 阅读 ( 225 )

班(class)和接口(interface)的区别

班(class)和接口(interface)的区别 面向对象编程(OOP)是软件开发中的一种常见范式。它有助于使用类和对象为编程带来真实的场景。类是创建对象的蓝图。程序员可以用属性和方法创建一个类。学生和老师是客体。创建对象称...

  • 发布于 2020-10-24 04:25
  • 阅读 ( 261 )

neon struct是你不知道想要的deus ex

...利用电灯开关,隐藏梯子,和安全系统黑客。
 霓虹灯结构通常并不难,但它有利于完美主义
 Neon Struct通常并不难,但它有利于完美主义,在每一节之后对你的表现进行评分——无论你是否触发警报,是否必须使任何敌人...

  • 发布于 2021-04-30 08:08
  • 阅读 ( 138 )

在线课程(online classes)和传统的课程(traditional classes)的区别

在线课程与传统课程 网络课堂和传统课堂是两种学习方式。它们都迎合了几乎相同的教育,并提供高质量的学习。你也将有老师,你将遵循课程大纲的教训,并在课程涉及考试。 在线课程通常是为独立学生开设的。你没有同...

  • 发布于 2021-06-23 15:26
  • 阅读 ( 477 )

结构(structure)和联盟(union)的区别

在C语言中,结构和联合都是用户定义的数据类型,在概念上是相同的,但是它们在某些方面还是不同的,比如内存分配给成员的方式。它们的声明类似,但功能不同。它们允许用户在一个名称下组合不同的数据类型。当声明结...

  • 发布于 2021-06-25 02:21
  • 阅读 ( 183 )

种姓(caste)和班(class)的区别

主要区别种姓(main difference caste) vs. 班(class) 在这篇文章中,我们将看到两个主要的社会学关注点之间的差异;种姓和阶级。两者都与社会分层制度有关。根据种姓和阶级,人类被分为几个不同的群体。这两者都不是人类...

  • 发布于 2021-06-27 07:41
  • 阅读 ( 165 )

班(class)和结构(structure)的区别

类和结构之间的主要区别在于,类是引用类型的数据类型,而结构是值类型的数据类型。 在编程中,变量是存储数据的存储区域。每个变量都有它可以存储的特定数据类型。主要有两种数据类型:值类型和引用类型。在值类型...

  • 发布于 2021-07-01 04:30
  • 阅读 ( 299 )

结构(structure)和C++类(class in c++)的区别

C++中结构和类的主要区别在于结构是一种值类型数据类型,而类是引用类型数据类型。 结构和类是C++中的两个编程概念。C++是一种高级的通用编程语言,它是C语言的超集,它由许多高级特征组成。数据主要有两种类型;它们是...

  • 发布于 2021-07-01 09:32
  • 阅读 ( 602 )

班(class)和方法(method)的区别

类和方法的主要区别在于,类是创建对象的蓝图或模板,而方法是描述对象行为的函数。 编程范式是一种解释程序元素组织方式的风格。面向对象编程(OOP)是一种常见的软件开发范式。开发人员可以将软件建模为一组对象,...

  • 发布于 2021-07-01 18:06
  • 阅读 ( 267 )
是薏仁米不是粥
是薏仁米不是粥

0 篇文章

相关推荐