C和C++中的struct有什么区别

区别一:

  • C语言中:

    • Struct是用户自定义数据类型(UDT)。
  • C++语言中:

    • Struct是抽象数据类型(ADT),支持成员函数的定义。

区别二:

  • C中的struct是没有权限设置的,且成员不可以是函数。C++中struct增加了访问权限,且可以和类一样有成员函数,成员函数:包括各类构造函数,析构函数,重载的运算符,友元类,友元结构,友元函数,虚函数,纯虚函数,静态函数。
  • C++中的struct等同于class,只是class默认成员权限是private,而struct默认成员权限是public,也就是说struct可以封装数据却不可以隐藏数据
  • class继承默认是private继承,而struct继承默认是public继承。都可以进行复杂的继承甚至多重继承,一个struct可以继承自一个class,反之亦可。

区别三:

  • C语言中,struct中的某个类型不可以直接初始化,而C++ struct里面成员初始化的形式和类是相同的

区别四:

  • 在用模版的时候,参数只能写class,例如:template < class Type>或template < typename Type>,不能写template < struct Type>。

此外,如果没有多态和虚拟继承,在C++中,struct和class的存取效率完全相同!简单的说就是,存取class的data member和非virtual function效率和struct完全相同!不管该data member是定义在基类还是派生类的。

注意class的data member在内存中的布局可不一定是data member的申明次序。C++只保证处于同一个access section的data member按照申明次序排列。

区别五:

  • 在C中重命名一个结构体类型要用typedef
typedef struct Student {
	int a;
} Stu;

定义变量:

Stu stu1;

但在c++里很简单

struct Student {
	int a;
};

定义变量:

Student stu2;

区别六:

  • 关于使用大括号初始化
    • class和struct如果定义了构造函数的话,都不能用大括号进行初始化
    • 如果没有定义构造函数,struct可以用大括号初始化。
    • 如果没有定义构造函数,且所有成员变量全是public的话,可以用大括号初始化。

你可能感兴趣的:(c++,c语言,开发语言)