C结构体与C++结构体的区别
让我们讨论一下C和c++的结构体有什么不同?在c++中,结构体类似于类。
C和c++结构体的区别
C结构体 | c++结构体 |
---|---|
只允许数据成员,不能有成员函数。 | 可以同时容纳:成员函数和数据成员。 |
不能具有静态成员。 | 可以有静态成员。 |
不能在结构中具有构造函数。 | 允许创建构造函数。 |
不可能直接初始化数据成员。 | 可以直接初始化数据成员。 |
写’ struct ‘关键字是必要的声明结构类型的变量。 | 声明结构类型变量不需要写’ struct ‘关键字。 |
不要有访问修饰符。 | 支持访问修饰符。 |
只允许指向结构体的指针。 | 可以同时具有指向结构体的指针和引用。 |
Sizeof操作符将为空结构体生成0。 | Sizeof操作符将为空结构体生成1。 |
不可能隐藏数据。 | 数据隐藏是可能的。 |
C和c++结构体的相似性
- 在C和c++中,默认情况下,结构的成员具有public可见性。
让我们来逐一讨论一下上面提到的一些异同:
结构体内部的成员函数
C语言中的结构体不能在结构体内部包含成员函数,但c++中的结构体可以在包含数据成员的同时包含成员函数。
输出:
输出:
静态成员
C结构体不能有静态成员,但c++允许有静态成员。
这会在C语言中产生错误,但在c++中不会。
在结构体中创建构造函数
C语言中的结构体不能在结构体中创建构造函数,但c++中的结构体可以创建构造函数。
这将在C语言中产生一个错误。
在c++中输出:
直接初始化
在C语言中不能直接初始化结构体数据成员,但在c++中可以这样做。
这将在C语言中产生一个错误。
c++中输出:
Using struct关键字
在C语言中,我们需要使用struct来声明struct变量。在c++中,结构体不是必需的。
例如,有一个Record结构体。在C中,我们必须对Record变量使用“struct Record”。在c++中,我们不需要使用struct,只使用’ Record ‘就可以了。
访问修饰符
C结构体没有访问修饰符,因为语言不支持这些修饰符。c++结构体可以有这个概念,因为它是内置在语言中的。
指针和引用
在c++中,可以同时存在指向结构体的指针和引用,但在C中只允许指向结构体的指针。
sizeof操作符
该操作符在C语言中为空结构体生成0,而在c++中为空结构体生成1。
C中的输出:
在c++中的输出:
注意:sizeof的默认类型是长unsigned int,这就是为什么在printf函数中使用” %lu “而不是” %d “的原因。
数据隐藏
C结构体不允许数据隐藏的概念,但在c++中是允许的,因为它是一种面向对象的语言,而C不是。
常量成员
C struct允许声明常量成员,但不允许初始化。但在c++中,你可以用 构造函数初始化器列表