学习啦>知识大全>知识百科>百科知识>

类有哪些基本特征及结构体的区别

谢君分享

  类是面向对象程序设计中的概念,是面向对象编程的基础。以下是学习啦小编为大家整理的类的基本特征,希望你们喜欢。

  类的简介

  类的实质是一种数据类型,类似于int、char等基本类型,不同的是它是一种复杂的数据类型。因为它的本质是类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。

  类是对现实生活中一类具有共同特征的事物的抽象。如果一个程序里提供的类型与应用中的概念有直接的对应,这个程序就会更容易理解,也更容易修改。一组经过很好选择的用户定义的类会使程序更简洁。此外,它还能使各种形式的代码分析更容易进行。特别地,它还会使编译器有可能检查对象的非法使用。

  类的内部封装了方法,用于操作自身的成员。类是对某种对象的定义,具有行为(be-havior),它描述一个对象能够做什么以及做的方法(method),它们是可以对这个对象进行操作的程序和过程。它包含有关对象行为方式的信息,包括它的名称、实现操作的函数和实现属性的数据。

  类的构成包括数据成员和成员函数。数据成员对应类的属性,类的数据成员也是一种数据类型,并不需要分配内存。成员函数则用于操作类的各项属性,是一个类具有的特有的操作,比如“学生”可以“上课”,而“水果”则不能。类和外界发生交互的操作称为接口。

  类的三大特性

  封装性

  将数据和操作封装为一个有机的整体,由于类中私有成员都是隐藏的,只向外部提供有限的接口,所以能够保证内部的高内聚性和与外部的低耦合性。用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员,能够增强安全性和简化编程。

  继承性

  继承性更符合认知规律,使程序更易于理解,同时节省不必要的重复代码。

  多态性

  同一操作作用于不同对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。

  类与结构体的区别

  在C++、C#语言中,class和struct都可以定义一个类,它们的区别如下:

  C#中,class是引用类型,继承自System.Object类;struct是值类型,继承自System.ValueType类,不具多态性。但是注意,System.ValueType是个引用类型。

  从职能观点来看,class表现为行为;而struct常用于存储数据。

  class支持继承,可以继承自类和接口;而struct没有继承性,struct不能从class继承,也不能作为class的基类,但struct支持接口继承。

  class可以声明无参构造函数,可以声明析构函数;而struct只能声明带参数构造函数,且不能声明析构函数。因此,struct没有自定义的默认无参构造函数,默认无参构造器只是简单地把所有值初始化为它们的0等价值。

  Java/C#中,实例化时,class要使用new关键字;而struct可以不使用new关键字,如果不以new来实例化struct,则其所有的字段将处于未分配状态,直到所有字段完成初始化,否则引用未赋值的字段会导致编译错误。

  class可以实现抽象类(abstract),可以声明抽象函数;而struct为抽象,也不能声明抽象函数。

  class可以声明protected成员、virtual成员、sealed成员和override成员;而struct不可以,但是值得注意的是,struct可以重载System.Object的3个虚方法,Equals()、ToString()和 GetHashTable()。

  class的对象复制分为浅拷贝和深拷贝,必须经过特别的方法来完成复制;而struct创建的对象复制简单,可以直接以等号连接即可。

  class实例由垃圾回收机制来保证内存的回收处理;而struct变量使用完后立即自动解除内存分配。

  作为参数传递时,class变量是以按址方式传递;而struct变量是以按值方式传递的。

  我们可以简单的理解,class是一个可以动的机器,有行为,有多态,有继承;而struct就是个零件箱,组合了不同结构的零件。其实,class和struct最本质的区别就在于class是引用类型,内存分配于托管堆;而struct是值类型,内存分配于线程的堆栈上。由此差异,导致了上述所有的不同点。所以只有深刻的理解内存分配的相关内容,才能更好的驾驭。

  当然,使用class基本可以替代struct的任何场合,class后来居上。虽然在某些方面struct有性能方面的优势,但是在面向对象编程里,基本是class横行的天下。

  那么,有人不免会提出,既然class几乎可以完全替代struct来实现所有的功能,那么struct还有存在的必要吗?答案是,至少在以下情况下,鉴于性能上的考虑,我们应该考虑使用struct来代替class:

  实现一个主要用于存储数据的结构时,可以考虑struct。

  struct变量占有堆栈的空间,因此只适用于数据量相对小的场合。

  struct数组具有更高的效率。

  类的主要词性变化

  ◎ 类 lèi 〈动〉

  (1)相似;像 [resemble;be similar to]

  遂入,杀孟阳于床。曰:"非君也,不类。"--《左传·庄公八年》

  不类前人。--《论衡·自纪》

  益奇而坚,其疏数偃仰,类智者所施设也。--唐·柳宗元《小石城山记》

  与张氏之吝书若不相类。-- 清·袁枚《黄生借书说》

  (2) 又

  令黄生贫类予,其借书亦类予。

  语类楚声。-- 明·魏禧《大铁椎传》

  绝类弥勒。--明·魏学洢《核舟记》

  画虎不成反类犬

  (3) 类比;类推 [analogy;reason by]义不杀少而杀众,不可谓知类。--《墨子》

  (4) 又如:类推

  (5) 通"戾"。偏,不平 [bias]

  夫富贵者则类,傲之;夫贫贱者则求柔之;是非仁人之情也。--《荀子·不苟》

  ◎ 类 lèi 〈副〉

  大抵;大都 [generally;in the main;mostly]

  观古今文人,类不护细行。--三国 魏·曹丕《与吴质书》

  走卒类士服。--宋· 司马光《训俭示康》


看过“类的三大特性”的人还看了:

1.什么是拓扑结构

2.秋季种什么蔬菜

3.什么是英语短语

4.语文中什么是代词

5.常见的15种公文分类有哪些

    1963963