面试题:1、C++中类和结构的区别是什么?
2、为什么C++的空类占用1个Byte的空间?
目录
前言
1、C和C++中结构体的不同
2、C++中结构和类的区别
在C++中结构和类都是数据的集合,体现了封装性,结构是在C语言的延续产物,类是在面向对象语言后出现的产物,通常我们认为类(class)是结构(struct)的扩展。类和结构往往有许多相同的地方,也有许多不同的之处,只有将它们了解清楚,才能明确什么时候我们应该用结构,什么时候我们用类。
C++ 中,结构可以有成员变量、方法、也可以有构造函数,同样也可以被继承,可以从接口派生。但是对于C与C++语言中同样是结构,它们也有不同之处
1)C语言中,结构(struct)不能为空,C++中可以。
在C语言中,结构(struct)是不能为空的,必须有成员数据,而在C++中可以是空的。
2)C语言中,结构体不能定义函数,C++中可以。
当然,在C++我们应尽量不要在结构体中定义函数体,应当竟可能延续结构体是数据的集
合这一基本理念。
3)意义和用法不同
因为在C中,结构只是数据的集合,所以构造函数、继承、public限定等特性,在C的结构
中不存在,但是在C++中这些特性,结构体都有。
1)成员默认访问权限的不同
结构默认访问权限是public,而类成员默认访问是private
2)默认结构所占空间不同
空的结构不占用空间,空的类占用一个字节的空间。
为什么类占用一个byte的空间?因为了实现每个实例在内存中都有一个独一无二的地址,
编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二
的地址。
3)类型不同
结构是值类型,值类型存储在栈中,类是引用类型,一般存储在堆中
4)结构和类型的效率不同
结构因为存储在栈中、类对象存储在堆中,结构比类的效率高些。但是结构一般存储小数
· 据,类通常存储比较大的数据内容
5)限制
struct只能添加带参的构造函数,不能使用abstract和protected等修饰符,不能初始化实例
字段
上一篇:国凌酱酒的生态价值