1. 虽然长的一样,但是本质上类型不同:C语言中:struct是用户自定义数据类型(UDT);C++中struct是抽象数据类型(ADT),所以下面代码:
struct HE
{
int a;
};
在C里面实际上数据类型为 (struct HE),所以定义一个结构HE变量都要 带上struct.
|
而在C++里面实际上数据类型为HE(主要是因为结构体被当成类对待了),所以定义变量不需要 struct.
|
由于C++中的struct是抽象数据类型,所以可以继承也可以实现多态,只是因为有了class 一般不用它。
2. C++语言将struct当成类来处理的,所以C++的struct可以包含C++类的所有东西,例如构造函数,析构函数,友元等,C++的struct和C++ class 唯一不同就是struct成员默认的是public, C++默认private。
这里不要记混了,C++中的struct为了和C语言兼容,所以默认也是public 的。
而C语言struct不是类,不可以有函数,也不能使用类的特征例如public等关键字 ,也不可以有static关键字,说到底它只是一些变量的集合体,可以封装数据却不可以隐藏数据。
【总结】
struct | C语言 | C++ |
---|---|---|
成员 | 没有函数成员,只有数据 | 函数和数据都可以有 |
访问权限 | 没有访问权限的设定,及对外不隐藏数据 | 有访问权限的设定private,public,protected |
是否可以继承 | 不可以 | 有继承关系 |
【补充】
在C里面,你可以
struct S {
int a, b;
}s_instance;
也可以 这样:
typedef struct {
int a, b;
}S;
S s_instance;
注意:前者struct S {} 是一个类型,中间的S是一个tag,所以只能用1次。
后者typedef把struct {} 定义为类型S,所以S可以多用。
基础的东西不用就忘记了....