结构体和类的区别

你。 提交于 2019-12-20 06:38:51

1.C的结构体和C++结构体的区别

   1.1 C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数、和this指针的。

   1.2 C的结构体对内部成员变量的访问权限只能是public,而C++允许public,protected,private三种。

   1.3 C语言的结构体是不可以继承的,C++的结构体是可以从其他的结构体或者类继承过来的。

   以上都是表面的区别,实际区别就是面向过程面向对象编程思路的区别:

       C的结构体只是把数据变量给包裹起来了,并不涉及算法。

       而C++是把数据变量及对这些数据变量的相关算法给封装起来,并且给对这些数据和类不同的访问权限。

 

   C语言中是没有类的概念的,但是C语言可以通过结构体内创建函数指针实现面向对象思想。

 

2.C++的结构体和C++类的区别

   2.1 C++结构体内部成员变量及成员函数默认的访问级别是public,而c++类的内部成员变量及成员函数的默认访问级别是private。

   2.2 C++结构体的继承默认是public,而c++类的继承默认是private。

3.obective-c结构体和obective-c类的区别

  3.1  objeive-c的结构体和c的结构体最接近的,不可以继承且不允许函数存在。

  3.2  obective-c类和java的类是最接近的,具体的差别读者可以自行查资料,这里就不详细说明了

 

 总结:java,objective-c,c++的结构体和类共性的区别是:

  1: 类是引用类型,结构是值类型

  2: 类在堆中,结构在栈分配内存

讨论了结构与类的相同之处和差别之后,下面讨论如何选择使用结构还是类:  

 1.堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些  

 2.结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。

        在此情况下,结构的成本较低。   

   3.在表现抽象和多级别的对象层次时,类是最好的选择   

   4.大多数情况下该类型只是一些数据时,结构时最佳的选择

  

  

 

 

 
 

1.C的结构体和C++结构体的区别

   1.1 C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数、和this指针的。

   1.2 C的结构体对内部成员变量的访问权限只能是public,而C++允许public,protected,private三种。

   1.3 C语言的结构体是不可以继承的,C++的结构体是可以从其他的结构体或者类继承过来的。

   以上都是表面的区别,实际区别就是面向过程面向对象编程思路的区别:

       C的结构体只是把数据变量给包裹起来了,并不涉及算法。

       而C++是把数据变量及对这些数据变量的相关算法给封装起来,并且给对这些数据和类不同的访问权限。

 

   C语言中是没有类的概念的,但是C语言可以通过结构体内创建函数指针实现面向对象思想。

 

2.C++的结构体和C++类的区别

   2.1 C++结构体内部成员变量及成员函数默认的访问级别是public,而c++类的内部成员变量及成员函数的默认访问级别是private。

   2.2 C++结构体的继承默认是public,而c++类的继承默认是private。

3.obective-c结构体和obective-c类的区别

  3.1  objeive-c的结构体和c的结构体最接近的,不可以继承且不允许函数存在。

  3.2  obective-c类和java的类是最接近的,具体的差别读者可以自行查资料,这里就不详细说明了

 

 总结:java,objective-c,c++的结构体和类共性的区别是:

  1: 类是引用类型,结构是值类型

  2: 类在堆中,结构在栈分配内存

讨论了结构与类的相同之处和差别之后,下面讨论如何选择使用结构还是类:  

 1.堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些  

 2.结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。

        在此情况下,结构的成本较低。   

   3.在表现抽象和多级别的对象层次时,类是最好的选择   

   4.大多数情况下该类型只是一些数据时,结构时最佳的选择

  

  

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!