请问C和C++结构体的主要区别是什么?
struct
和class
是完全相同的东西,除了struct默认为public
类型,而class默认为private
类型。struct Foo {};
,你需要写struct Foo foo;
来创建该类型的变量,而在C++中,你可以只写Foo foo;
,尽管C样式也被允许。C程序员通常使用typedef struct {} Foo;
来允许C++语法进行变量定义。struct x {}; void x() {}
,而这个不正确:typedef struct x {} x; void x() {}
,因为全局标识符空间已经有了一个x
(typedef),函数的声明会发生冲突(顺便说一下,在第一个示例中,创建变量需要写成struct x var
,以便将标识符仅作为用户定义类型进行搜索)。 - David Rodríguez - dribeasC++中,结构体与类的表现方式相似,都可以包含方法、构造函数、析构函数等等...
类和C++结构体的主要区别在于:结构体内部默认为public,而类内部默认为private(即:外部无法直接访问)
C和C++的结构有几个不同之处。
C中,定义结构类型值需要使用struct关键字,而在C++中则不需要。
C中,结构内部没有函数。而在C++中,我们可以定义直接访问结构体数据成员的函数(在C++中称为方法)。
C中,结构内部不存在访问修饰符的概念(例如private和public)。而在C++中,我们可以使用访问修饰符。默认情况下,所有成员都是public。
C中,结构体不能具有静态成员,但在C++中结构体可以具有静态成员。
在C中,空结构体的大小是一个约束违规,但在C++中它的大小始终为1。
我们可以在C++中既有结构体指针也有结构体引用,但在C语言中只允许使用结构体指针(引用不是C语言的特性)。
virtual
方法,而不是vtable(在C++语言规范中并不存在)。 - Thomas MatthewsC语言中的结构体更类似于组合数据结构的定义。
C++语言中的结构体可以被视为一个类,但是所有成员变量的作用域都默认为public。
C语言中不能在结构体内定义函数。
C++语言中可以在类或结构体内定义成员函数。