类和对象的定义和使用
【类和对象的基本概念】
“什么是类?”对于这个问题我相信一个从事C++不久的人并不能够一下子解答出来,但其实它却是一样很好描述的东西。类其实就是类型。要了解类,我们首先就需要知道什么是对象。对象其实就是某一个具体的实体。例如一个杯子,一个苹果,这些具体的事物,我们将它们称之为一个具体的对象。在现实生活中,我们是需要对自己的物品进行整理的,如果我们不进行整理,就会显得非常的乱,而当我们需要找寻某一件东西的时候也会变得很难找。所以我们对于这些东西(也就是对象)需要有一个行之有效的管理策略,也就是分类了。而类型就是这样因运而生的。
所谓的类其实就是一个类型。通常我们会将某一个对象归结为某一类型的对象。例如一个杯子其实就是一个/杯子类型的/具体对象(请阅读时注意断句)一个苹果其实就是一个苹果类型的具体对象??按照这样的逻辑我们可以得出来一个最基本的结论。类型是抽象的,它泛指一类相同的事物,而对象是形象的,也可以说是具体的,它指代一样具体的东西。
【属性和方法】
每一类事物都会有一些固定的或者不定的特征,用于描述这些特征的信息我们称之为属性。在C++中属性通常是指存储属性的变量,也叫成员变量。例如我们可以描述某一个学生的信息有学号、姓名、年龄等,这些就是学生类型的属性。(因为每一个学生都会有这些属性)
方法是针对属性的操作,简而言之就是使用某一个类中属性的具体方法,通常我们会在类中使用函数来体现(函数的实现过程其实就是使用编程语言描述事物处理方法的过程),这一类的函数我们称之为成员函数,也叫成员方法。
在C++中,一个类就是由不定量的成员方法和属性构成。
【访问权限】
访问权限是每一个面向对象语言(OOL)都会有的一个特色,它通过某一些
固定的关键字能够给类中的成员指定外部人员的访问权限。通常较多的是public(公有的)、private(私有的)以及protected(保护的)。下面我们可以将一个类想象成一个人,了解一下这些关键字的含义:
public(公有的),顾名思义就是所有的人都可以自由使用的一些资源,无论是这个类本身还是除了这个类外的其他代码都可以自由地对这个类中的公有资源进行访问和操作,不受任何限制。
private(私有的),这很明显就是只有这个类自己才可以使用的一些资源,这些资源一般都是一些数据,例如存储学号、姓名等信息的变量。它们完全不能够被外部的代码访问,除非你是这个类的友元。(关于友元的概念我们下一次再讨论)默认情况下类的成员都是私有的。
protected(保护的),这个含义比较难解释,在这里我们也不进行讨论,在后期我们讨论继承的时候我们再继续说回这个话题。
访问限定符在类中无先后次序,各限定符允许多次出现。
【C++类的构造方法】
在C++中构造一个类型,我们通常需要进行以下的步骤,下面我们可以通过一个简单的例子来说明:
如上就是一个基本的类。类通常以class为关键字打头,后面跟着类的名称,本例中为Student,以一对花括号说明类的本体,以分号指代类的定义结束。通常在定义类的过程中使用private关键字来说明数据成员,当使用private:开头
时,则说明在private:之后的所有成员都将为私有的成员,除了Student类中的方法成员可以自由访问外,其他类外的成员将统统无法访问。同样public:打头时,说明public:之后的所有成员都是公有成员,任何区域的代码都可以对它们进行自由的访问。
【C++中对象的定义和使用】
在定义玩上述的类之后,我们就可以构造一个Student类的对象了,也就是一个用于存储某一个具体学生信息的变量。定义Student对象std代码如下:
大家可以看到,对象定义的方法其实和定义变量非常的相似。那么接下来就是如何在std中保存信息了。按照我们以往的思路我们一定会写成如下的形式:
但毫无疑问的是这种赋值方式出现了错误,让我们一起来看看错误的原因:
造成这些错误的原因又是何在呢?其实这主要是因为我们在前面定义类的时候将ID、Name、Age三个属性定义成了private私有的类型,所以除了类中的代码之外,其他在类外的代码,例如主函数中的代码都不能够直接的访问这些成员,但是为了数据的安全,我们不得不这样做。那么我们怎样才能够做到既能够保证数据既安全又能够被访问到呢?这就是下面的这些函数的功劳:
这些函数都比较简短,我相信大家一眼就能够看出来这是什么意思。在这里要说明一下的是为了在赋值的时候防止形参的名称和类中已有的属性的名称相
同而导致编译器无法识别到底要对哪个数据进行操作,因此在C++中提出了this指针的概念,this这个关键字其实就指代当前的对象。例如当我们对std中的ID进行赋值时,这个this就指代的是std。因为类是抽象的,你永远都不可能知道别人会使用这个类去命名哪些对象,所以我们利用类能够统一描述对象的特性,使用this来代替每一个具体的对象的名称。对于程序员来说这无疑是既方便又快捷的。
这些函数相当于是对象和外部交互的接口,通过这些接口我们可以自由的对每一个对象进行访问,我们可以通过get函数获取对象的属性信息,也可以通过set函数设置对象的属性信息。它们的使用方法如下:
运行效果如下:
好了,由此类和对象的基本应用方式就给大家说明完了,希望大家能够看得懂,如果想要了解更多的有关于类和对象的信息,请大家不要忘记有事可以找度娘。当然也可以咨询我。
【补充习题】
1、类是_________(抽象/形象),对象是_______________(抽象/形象)
2、类的三个基本特性是_________、__________、______________
3、类定义的关键字是_________。类的数据成员通常指定为_________、而类的函数成员通常指定为_________成员。指定为_______的类的成员可以在类对象所在域中的任何位置访问它们,而类的_________成员只能够在该类的成员函数或者友元中访问。
4、类的访问限定符包括______、_________、_________。默认情况下类的成员都是______的。访问限定符在类中______(有/无)先后次序,各限定符_____(允许/不允许)多次出现。
5、请构造一个图书类,并使用图书类描述下述表格中的信息,并打印出来。