C++ 结构体和类的区别
在C++中,结构体和类基本相同,只是有一些区别。安全性对于结构体和类都非常重要。结构体不安全,因为无法将其实现细节隐藏起来,而类是安全的,可以隐藏其编程和设计细节。在本文中,我们将讨论C++中结构体和类的区别。但在讨论区别之前,我们将了解一下C++中的结构体和类。
C++中的结构体是什么
结构体是一组同名引用的不同数据类型的变量的 分组 。结构体声明用作创建结构体实例的模板。
语法:
结构体的语法如下所示:
Struct Structurename
{
Struct_member1;
Struct_member2;
Struct_member3;
.
.
.
Struct_memberN;
};
“struct” 关键字告诉编译器已声明了一个结构体。 “structurename” 定义了结构体的名称。由于结构体声明被视为语句,因此通常以分号结束。
C++中的类是什么
C++中的类与C结构类似,由 数据成员 列表和在类上执行的一组操作组成。换句话说,类是面向对象编程的 **构建块 class class_name { // private data members and member functions. Access specifier; Data member; Member functions (member list){ . . } };
在这个语法中,class是一个关键字,用于告诉编译器一个类已经被声明。面向对象的主要功能是数据隐藏,这是通过使用三个访问修饰符来实现的: “public”,”private” 和 “safe” 。如果在声明数据成员或成员函数时,类中没有指定访问修饰符,它们默认被认为是私有的。
public访问修饰符允许其他人访问程序的函数或数据。类的成员只能访问类的私有成员。在继承过程中,使用safe访问修饰符。如果访问修饰符被声明,它不能再在程序中改变。
结构和类之间的主要区别
在这里,我们将讨论结构和类之间的主要区别。其中一些如下:
- 默认情况下,结构的所有成员都是公有的。相比之下,类的所有成员都是私有的。
- 结构将自动初始化其成员,而类的成员则使用构造函数和析构函数来初始化。
- 当实现结构时,内存分配在堆栈上。相反,类的内存分配在堆上。
- 结构中的变量不能在声明时初始化,但可以在类中进行初始化。
- 任何结构成员中都不能有null值,而类变量可以有null值。
- 结构是值类型,而类是引用类型。
- 可以使用特殊方法描述对新数据形式进行操作的运算符。
结构和类的头对头比较
在这里,我们将讨论结构和类的头对头比较。其中一些如下:
功能 | 结构体 | 类 |
---|---|---|
定义 | 结构体是由同名引用的各种数据类型的变量组成的。 | 在c++中,类被定义为包含在单一结构中的相关变量和函数的集合。 |
Basic | 如果没有指定访问说明符,则所有成员都设置为’public’。 | 如果没有定义访问说明符,则所有成员都设置为’private’。 |
实例 | 结构实例称为“结构变量”。 | 一个类的实例叫做object 。 |
继承 | 它不支持继承。 | 它支持继承。 |
分配的内存 | 内存在栈上分配。 | 内存在堆上分配。 |
Nature | 值类型 | 引用类型 |
目的 | 组织数据 | 数据抽象和进一步继承。 |
用途 | 它用于较小的数据量。 | 它用于处理大量数据。 |
null值 | 不可能的 | 它可以有null值。 |
需要构造函数和析构函数 | 它可能只有参数化的构造函数。 | 它可以包含所有类型的构造函数和析构函数。 |
结构体定义:
struct structure_name{
type struct_member 1;
type struct_member 2;
type struct_member 3;
.
type struct_memberN;
};
类定义:
class class_name{
data member;
member function;
};
相似之处
以下是结构体和类之间的相似之处:
- 结构体和类都可以声明其成员为私有。
- 结构体和类都支持继承机制。
- 在C++中,结构体和类在语法上是相同的。
- 可以将结构体或类的名称作为独立的类型使用。
结论
C语言的结构体存在一些限制,比如无法隐藏数据、无法将结构体数据当作内置类型以及缺乏继承支持。C++的结构体克服了这些缺点。
C++中的扩展版本结构体被称为类。程序员可以轻松地使用类来保存数据和函数,而结构体只能保存数据。