智能高科网

结构体和类的本质区别?

70 2024-03-12 14:17 admin

一、结构体和类的本质区别?

结构体和类在本质上非常相似,它们都是用于封装数据和行为的复合类型。但是,它们之间有一些关键的区别。

首先,结构体在默认情况下是值类型,而类是引用类型。这意味着当你创建一个结构体实例时,它会被存储在栈中,而当你创建一个类实例时,只有一个指向实例的引用被存储在栈中,实际的实例数据被存储在堆中。因此,当你将一个结构体传递给一个函数或方法时,会发生值复制,而当你传递一个类时,只会传递引用。

其次,类具有继承性,可以从另一个类继承属性和方法,并添加自己的属性和方法。结构体没有继承性。

另外,类还支持析构函数、引用计数和可选类型等高级特性,这些特性在结构体中不可用。

最后,结构体通常用于较小的数据类型,例如二维坐标或颜色。类通常用于更复杂的对象,例如窗口或数据库连接。

总之,结构体和类在本质上非常相似,但它们之间的区别在于值语义与引用语义、继承性和高级特性等方面。

二、c结构体,c++结构体和c++类的区别?

C结构体是C语言中由struct申明的一个数据块。如果以C的标准申明的结构体的C++中也和C一样。类(一般如果由struct申明的有成员函数也称为类)和结构体的不同是类除了数据还有操作,也就是调用它的成员函数。比如

class

三、c语言结构体和类之间的区别?

C/C++ 类和结构体的的区别:

1、结构体基本用在很多数据,需要一个结构体来封装这些数据。而类的话,是面向对象的思想,可以有很多接口让人调用,私有变量等外部不能调用,还有保护类型的变量。

2、结构体也可以被认为是一种特殊的类,它不存在任何函数,构造和析构函数也没有,而且是一个公共的的类。

3、结构体在默认情况下成员是公共的(public),类在默认情况下成员是私有的(private)。

4、C++结构体内部成员变量及成员函数默认的访问级别是public,而c++类的内部成员变量及成员函数的默认访问级别是private。

5、C++结构体的继承默认是public,而c++类的继承默认是private。

6、类要加上public变成共有的才能被访问,而结构本身就是共有的可直接访问。

7、C定义结构体变量时需要加struct关键字,C++中定义结构体变量时可以不加struct关键字。

扩展资料:

世界上第一种计算机高级语言是诞生于1954年的FORTRAN语言。之后出现了多种计算机高级语言。1970年,AT&T的Bell实验室的D.Ritchie和K.Thompson共同发明了C语言。研制C语言的初衷是用它编写UNIX系统程序,因此,它实际上是UNIX的“副产品”。它充分结合了汇编语言和高级语言的优点,高效而灵活,又容易移植。

1971年,瑞士联邦技术学院N.Wirth教授发明了Pascal语言。Pascal语言语法严谨,层次分明,程序易写,具有很强的可读性,是第一个结构化的编程语言。

20世纪70年代中期,Bjarne Stroustrup在剑桥大学计算机中心工作。他使用过Simula和ALGOL,接触过C。他对Simula的类体系感受颇深,对ALGOL的结构也很有研究,深知运行效率的意义。既要编程简单、正确可靠,又要运行高效、可移植,是Bjarne Stroustrup的初衷。以C为背景,以Simula思想为基础,正好符合他的设想。1979年,Bjame Sgoustrup到了Bell实验室,开始从事将C改良为带类的C(C with classes)的工作。

1983年该语言被正式命名为C++。自从C++被发明以来,它经历了3次主要的修订,每一次修订都为C++增加了新的特征并作了一些修改。第一次修订是在1985年,第二次修订是在1990年,而第三次修订发生在c++的标准化过程中。在20世纪90年代早期,人们开始为C++建立一个标准,并成立了一个ANSI和ISO(Intemational Standards Organization)国际标准化组织的联合标准化委员会。该委员会在1994年1月25曰提出了第一个标准化草案。在这个草案中,委员会在保持Stroustrup最初定义的所有特征的同时,还增加了一些新的特征。

在完成C++标准化的第一个草案后不久,发生了一件事情使得C++标准被极大地扩展了:Alexander stepanov创建了标准模板库(Standard Template Library,STL)。STL不仅功能强大,同时非常优雅,然而,它也是非常庞大的。在通过了第一个草案之后,委员会投票并通过了将STL包含到C++标准中的提议。STL对C++的扩展超出了C++的最初定义范围。虽然在标准中增加STL是个很重要的决定,但也因此延缓了C++标准化的进程。

委员会于1997年11月14日通过了该标准的最终草案,1998年,C++的ANSI/IS0标准被投入使用。通常,这个版本的C++被认为是标准C++。所有的主流C++编译器都支持这个版本的C++,包括微软的Visual C++和Borland公司的C++Builder。

C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。

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

四、三萜类和甾体类结构区别?

皂苷是固醇或三萜类化合物的低聚配糖体总称。根据皂苷元的结构分为三萜皂苷和甾体皂苷两大类。三萜皂苷是由三萜皂苷元和糖组成的,三萜皂苷元的结构可分为五环三萜和四环三萜两类。

五环三萜皂苷元又分为齐墩果烷型、乌苏烷型、羽扇豆烷型、木栓烷型四种。三七总皂苷属于三萜类皂苷中的齐墩果烷型。因此甾体总皂苷和三七总皂苷的区别是皂苷元的结构不同。

五、结构体和类有什么区别?

类是对事物的描述,结构体只是用来表示一个结构。

1、类是对一件事物的抽象,可以有自己的访问方式(如public),成员变量,成员函数,继承和被继承这样的关系。2、结构体,只是用来表示一个结构的,它有成员变量,成员函数(c++后来加入的……)。但是没有访问方式和继承这样的关系,它只是用于表示一种数据结构。

六、c语言结构体和类之间的区别举例?

一、C和C++中结构体的不同

(1)C语言中的结构体不能为空,否则会报错

C语言中要求一个结构或联合至少有一个成员。C语言中,空结构体的大小为0,而C++中空结构体(属于空类)的大小为1

(2)C语言中的结构体只涉及到数据结构,而不涉及到算法

在C语言中数据结构和算法是分离的。换句话说就是C语言中的结构体只能定义成员变量,但是不能定义成员函数

然而在C++中既可以定义成员变量又可以定义成员函数, C++中的结构体和类体现了数据结构和算法的结合

不过虽然C语言的结构体中不能定义成员函数,但是却可以定义函数指针,不过函数指针本质上不是函数而是指针,所以总的来说C语言中的结构体只是一个复杂数据类型 ,只能定义成员变量,不能定义成员函数,不能用于面向对象编程

(3)C语言中定义结构变量时不可省略struct关键字,C++可以省略

在C语言中使用struct定义的结构体中在定义变量的时候,struct不能省略

但是在C++之中则可以省略struct

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

C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能

struct能包含成员函数吗? 能!

struct能继承吗? 能!!

struct能实现多态吗? 能!!!

既然这些它都能实现,那它和class还能有什么区别?

最本质的一个区别就是默认的访问控制:

默认的继承访问权限:struct是public的,class是private的

C++中,不使用结构体丝毫不会影响程序的表达能力。C++之所以要引入结构体,是为了保持和C程序的兼容性

但有时仍会在C++中使用结构体,是因为可以使用结构体将不同类型数据组成整体,方便于保存数据(若用类来保存,因类中成员默认为私有,还要为每个数据成员特定函数来读取和改写各个属性,比较麻烦)

struct可以继承class,同样class也可以继承struct

struct是一种数据结构的实现体,虽然它是可以像class一样的用。我依旧将struct里的变量叫数据,class内的变量叫成员,虽然它们并无区别

三、总结

概念:class和struct的语法基本相同,从声明到使用,都很相似,但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到

类型:struct是值类型,class是引用类型,因此它们具有所有值类型和引用类型之间的差异

效率:由于堆栈的执行效率要比堆的执行效率高,但是堆栈资源却很有限,不适合处理逻辑复杂的大对象,因此struct常用来处理作为基类型对待的小对象,而class来处理某个商业逻辑

关系:struct不仅能继承也能被继承 ,而且可以实现接口,不过Class可以完全扩展。内部结构有区别,struct只能添加带参的构造函数,不能使用abstract和protected等修饰符,不能初始化实例字段

七、结构体和枚举体的区别?

结构体和枚举体都是C语言中用于数据组织的工具,但它们之间存在一些区别。

结构体(Struct)是一种自定义的数据类型,它允许将多个不同类型的变量组合在一起,形成一个新的数据类型。结构体中的成员变量可以是不同类型的数据,例如整数、浮点数、字符、指针等等。结构体可以包含多个成员变量,这些成员变量可以是相同类型或不同类型。

例如,下面的代码定义了一个名为`Person`的结构体,它包含两个成员变量`name`和`age`,分别表示人的姓名和年龄:

```c

struct Person {

char name[20];

int age;

};

```

枚举体(Enum)是一种特殊类型的常量集合,它定义了一组常量,这些常量可以是整数或字符等基本数据类型。枚举体中的每个常量都是唯一的,并且它们的值是自动生成的。

例如,下面的代码定义了一个名为`weekday`的枚举体,它包含了一周中的每一天:

```c

enum weekday {

Monday,

Tuesday,

Wednesday,

Thursday,

Friday,

Saturday,

Sunday

};

```

结构体和枚举体都可以用来组织数据,但它们之间有以下几点区别:

1. 结构体可以包含不同类型的成员变量,而枚举体中的成员变量只能是相同类型或基本数据类型。

2. 结构体可以包含任意数量的成员变量,而枚举体中的成员变量是有限数量的。

3. 结构体可以用于定义自定义的数据类型,而枚举体只能定义常量集合。

4. 结构体可以包含函数指针等复杂数据类型,而枚举体不能包含函数指针等复杂数据类型。

因此,结构体和枚举体都有自己的用途和特点,可以根据实际需求选择使用哪种数据组织方式。

八、结构体名和结构体类型名的区别?

①结构体名。是对结构体进行命名的一种变量名。结构体是一种数据类型,是一种创建变量的模板,编译器不会为它分配内存空间,就像 int、float、char 这些关键字本身不占用内存一样;结构体变量才包含实实在在的数据,才需要内存来存储。

②结构体类型名。结构体是一种构造数据类型,可以把不同类型的数据整合在一起,每一个数据都称为该结构体类型的成员。使用结构体类型时,首先要对结构体类型定义,结构体类型的定义方法如下所示:

struct 结构体类型名称

{

数据类型成员名1;

数据类型成员名2;

};

"struct"是定义结构体类型的关键字,其后所定义的结构体类型名称,在结构体类型名称下的括号中,定义了结构体类型的成员项,每个成员由数据类型和成员名,共同组成。

九、构体和结构的区别?

结构是一个汉语词汇,读音为jié gòu,由组成整体的各部分的搭配和安排;建筑物承重部分的构造;构筑;建造等意思。

体系,泛指一定范围内或同类的事物按照一定的秩序和内部联系组合而成的整体,是不同系统组成的系统。自然界的体系遵循自然的法则,而人类社会的体系则要复杂得多。影响这个体系的因素除人性的自然发展之外,还有人类社会对自身认识的发展。

结构更加偏重内部构造,体系的话一般是指一个整体。

十、c++类结构体和函数的区别是什么?

C++中的结构体与类的区别只在于结构体的成员默认为公有成员(public可见性),而类的成员默认为私有成员(private可见性),C++中的结构体不同于C语言里的结构体,C里的结构体只能封装一些单一的数据,不能含方法,但在C++的结构体内可以有构造函数,成员函数,还可以指定成员的访问权限(如public和private)。

1、类可以被认为是结构体的一个升级版,它是由结构体演变过来的,在此基础上加了一些限制,以便更好实现面向对象的设计。结构体基本用在很多数据,需要一个结构体来封装这些数据。而类的话,是面向对象的思想,可以有很多接口让人调用,私有变量等外部不能调用,还有保护类型的变量。

2、结构体也可以被认为是一种特殊的类,它不存在任何函数,构造和析构函数也没有,而且是一个公共的的类;相关推荐>>C++中适用于类和结构体的内存池模板类

3、C++类和结构体概念基本一致,区别在于结构体在默认情况下成员是公共的(public),类在默认情况下成员是私有的(private),其他的都一样,类有的结构体也有。

4、C++结构体内部成员变量及成员函数默认的访问级别是public,而c++类的内部成员变量及成员函数的默认访问级别是private。

5、C++结构体的继承默认是public,而c++类的继承默认是private。

6、类要加上public变成共有的才能被访问,而结构本身就是共有的可直接访问。

7、C++中struct与class本质上相同的,只是默认的访问权限不同,之所以要保留struct,是为了与C兼容。

与C中结构体不同的是,C++中定义结构体变量时可以不加struct关键字,如:

struct student{

char *name;

int age;

};

student s;//在C中的话要写成struct student s;

顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
用户名: 验证码:点击我更换图片