C中的struct和C++中的struct的区别
C | C++ | |
---|---|---|
成员函数 | 不允许 | 允许 |
静态成员 | 不允许 | 允许 |
访问属性 | 默认public,不能修改 | 默认public,还可以是private或者protected |
继承关系 | 不可以继承 | 可以从其他类或结构体继承 |
初始化 | 不能直接初始化数据成员 | 可以直接初始化数据成员 |
C是面向过程的编程语言,C++是面向对象的编程语言
C中的结构体就是不同类型数据的集合,并不涉及算法和操作
C++中是把数据变量及对这些变量的相关算法和操作给封装起来
C++中struct和class的区别
更像自定义数据结构集合的话用struct。如果更像一种对象的话用class
在编写C++代码时,我强烈建议使用 class 来定义类,而使用 struct 来定义结构体,这样做语义更加明确
在C++中引入struct是为了保持对C程序的兼容,在引入之后C++对其进行了扩充,C++中struct可以拥有静态成员、成员数据可进行初始化、成员函数、可以继承、支持多态。从表面看起来两者之间没有区别,但也存在差异
-
内部成员变量及成员函数的默认属性
struct默认是public,而class默认是private
-
继承关系中默认属性
在继承关系中,struct继承struct默认是public的,而class继承class默认是private
默认的继承属性取决于子类而不是基类:
struct A{}; class B : A{};//取决于子类,默认是private struct C : A{};//取决于子类,默认是public
所以在写代码的时候,为了不引起歧义,需要指明继承的方式,而不要用默认的继承
-
模板的使用
class关键字还可以定义模板参数,就像typename,但是struct不用于定义模板参数
template<typename T, typename Y> int func(const T& t, const Y& y) { }
-
赋初值
C++中的struct兼容过去C中struct的特性
struct A { char a; int b; double c; }; A d = {'p', 1, 2.3};//定义时赋初值,struct没问题,class出错