类有哪些基本特征及结构体的区别
类是面向对象程序设计中的概念,是面向对象编程的基础。以下是学习啦小编为大家整理的类的基本特征,希望你们喜欢。
类的简介
类的实质是一种数据类型,类似于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.语文中什么是代词