类、结构体、联合的区别
1.结构体
1.1什么是结构体
在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
1.2 结构体的定义与声明
先声明数据结构
struct 结构名
{
结构的数据类型
};
接着就是定义结构了
struct 结构名 结构变量名称
例如下:
struct student
{
int stu_num;
char stu_name[50];
}struct student stu;
2.联合体
2.1什么叫联合体
在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体,也叫联合体。
2.2联合体的定义
定义一个联合类型的一般形式为:
union 联合名
{
成员表
};
成员表中含有若干成员,成员的一般形式为: 类型说明符 成员名 成员名的命名应符合标识符的规定。
代码示例:
union perdata
{
int class;
char office;
}
定义了一个名为perdata的联合类型,它含有两个成员,一个为整型,成员名为class;另一个为字符数组,数组名为office。联合定义之后,即可进行联合变量说明,被说明为perdata类型的变量,可以存放整型量class或存放字符数组office。
3.类
3.1什么叫类
C++ 中的类(Class)可以看做C语言中结构体(Struct)的升级版。结构体是一种构造类型,可以包含若干成员变量,每个成员变量的类型可以不同;可以通过结构体来定义结构体变量,每个变量拥有相同的性质。
C++ 中的类也是一种构造类型,但是进行了一些扩展,类的成员不但可以是变量,还可以是函数;通过类定义出来的变量也有特定的称呼,叫做“对象”。
3.2代码示例
class Date
{
private:
int hour;
int minute;
int day;
public:
void display()
{
count << hour << endl;
count << minute << endl;
count << day << endl;
}
Date(int k, int l, int o)//类中不能初始化变量,故可以用析构函数进行初始化
{
hour = k;
minute = l;
day = o;
}
};
4.类和结构体的区别
- 结构体也可以被认为是一种特殊的类,它不存在任何函数,构造和析构函数也没有,而且是一个公共的的类。
- 结构体在默认情况下成员是公共的(public),类在默认情况下成员是私有的(private)。
- C++结构体的继承默认是public,而c++类的继承默认是private。
- 类要加上public变成共有的才能被访问,而结构本身就是共有的可直接访问。
- C定义结构体变量时需要加struct关键字,C++中定义结构体变量时可以不加struct关键字。
- 结构体基本用在很多数据,需要一个结构体来封装这些数据。而类的话,是面向对象的思想,可以有很多接口让人调用,私有变量等外部不能调用,还有保护类型的变量。
5.联合和结构体的区别
- 他们都是c语言的一种数据类型.
- 结构体和联合体可以含有多种数据类型,枚举只能含有一种基本数据类型,而且为整型。
- 结构体和联合体所占的空间不同,结构体按照对其方式每个数据类型都是独立的数据空间,整个结构体所占的空间基本上可以等于或者大于每个独立数据空间的和。而联合体所有数据类型都共享最大的那个数据类型的空间,所占的空间为最大的那个数据类型所占的空间。
- 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻,联合中只存放了一个被选中的成员, 而结构的所有成员都存在。
- 对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在.
- 在一定情况下联合和结构体也可以联系起来使用,其目的是为了节省空间。