定义:
在c语言中,struct是一种自定义的数据类型。它是由若干的“成员”组成的。每一个成员可以是一个基本数据类型或是一个用户自定义类型。其一般的定义形式为:
struct 结构名 { 成员表列 };既然struct是一种数据类型,那么就肯定不能定义函数,所以在面向过程的c中,struct不含任何函数。 但是当struct进入面向对象的c++新时代时,其特性有了新的发展,struct被看成对象,可以包含函数,可以拥有构造函数,析构函数,同样拥有继承等能力。
区别:
- 关于使用大括号初始化
class和struct如果定义了构造函数的话,都不能用大括号进行初始化
如果没有定义构造函数,struct可以用大括号初始化。
如果没有定义构造函数,且所有成员变量全是public的话,可以用大括号初始化。
- 默认继承权限
如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理;
到底默认是public继承还是private继承,取决于子类而不是基类。我的意思是,struct可以继承class,同样class也可
以继承struct,那么默认的继承访问权限是看子类到底是用的struct还是class。如下:
struct A{};
class B : A{}; //private继承
struct C : B{}; //public继承
- 成员的默认访问权限
class的成员默认是private权限,struct默认是public权限。
在class地盘上,struct有了狗拿耗子多管闲事的嫌疑。但是考虑到“对C兼容”,这一点,struct被保留了下来,但是如何使用c++中的struct和c进行兼容呢,感到很疑惑。
把C++要交换到C程序的数据在C++程序中声明成一个struct,然后根据C++中程序的语意选择继承或者聚合这个struct,然后在使用的时候就可以把这个struct封装起来传递到C中或者从C中传递到C++。
感觉对如何进行兼容还不是很懂
持续更新....知道弄懂