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

文章详细阐述了C语言和C++中Struct与Class的不同点,包括它们在数据封装、成员函数、访问权限、初始化方式、以及在模板和typedef使用上的差异。C中的Struct是用户自定义数据类型,不支持成员函数,而C++中的Struct等同于Class,具有访问权限和成员函数。此外,C++中的Class和Struct在存取效率上,在没有多态和虚拟继承的情况下是相同的。
摘要由CSDN通过智能技术生成

区别一:

  • 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的话,可以用大括号初始化。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值