基础面试题: C++中结构和类的区别

面试题:1、C++中类和结构的区别是什么?

               2、为什么C++的空类占用1个Byte的空间?


目录

前言         

1、C和C++中结构体的不同 

2、C++中结构和类的区别


前言         

        在C++中结构和类都是数据的集合,体现了封装性,结构是在C语言的延续产物,类是在面向对象语言后出现的产物,通常我们认为类(class)结构(struct)的扩展。类和结构往往有许多相同的地方,也有许多不同的之处,只有将它们了解清楚,才能明确什么时候我们应该用结构,什么时候我们用类。

C++ 中,结构可以有成员变量、方法、也可以有构造函数,同样也可以被继承,可以从接口派生。但是对于C与C++语言中同样是结构,它们也有不同之处

1、C和C++中结构体的不同 

        1)C语言中,结构(struct)不能为空,C++中可以。
             在C语言中,结构(struct)是不能为空的,必须有成员数据,而在C++中可以是空的。

        2)C语言中,结构体不能定义函数,C++中可以。

              当然,在C++我们应尽量不要在结构体中定义函数体,应当竟可能延续结构体是数据的集

               合这一基本理念。

        3)意义和用法不同

             因为在C中,结构只是数据的集合,所以构造函数、继承、public限定等特性,在C的结构

             中不存在,但是在C++中这些特性,结构体都有。


2、C++中结构和类的区别

       1)成员默认访问权限的不同

             结构默认访问权限是public,而类成员默认访问是private

        2)默认结构所占空间不同

            空的结构不占用空间,空的类占用一个字节的空间。

             为什么类占用一个byte的空间?因为了实现每个实例在内存中都有一个独一无二的地址,

             编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二

             的地址。

        3)类型不同

              结构是值类型,值类型存储在栈中,类是引用类型,一般存储在堆中

        4)结构和类型的效率不同

              结构因为存储在栈中、类对象存储在堆中,结构比类的效率高些。但是结构一般存储小数

·             据,类通常存储比较大的数据内容

        5)限制

              struct只能添加带参的构造函数,不能使用abstract和protected等修饰符,不能初始化实例

              字段


猜你喜欢

转载自blog.csdn.net/lejian/article/details/128932544