抽象:
要将现实中的一个具体事务,变成C++中的一个类,例如将现实中的汽车变成代码中的car类。完成这个过程就需要 抽象 这一基本手段。
抽象是指 对具体问题(对象)进行分析概括,找出该类对象的公共性质(属性,方法),然后将这些公共性质描述出来。例如,汽车中的公共性质由有:1.属性:轮胎,玻璃,座位。 2.方法:行驶,保护。由这些公共性质便可以写出car类。
封装:
通过抽象,我们可以将现实世界中的某一个对象的公共性质找出来(有意识地从两个方向寻找:1.属性,2.方法)。接下来,我们要真正写出car类,需要将这些公共性质组装成具体得car类。完成这个过程就需要 封装 这一基本手段。
封装就是将抽象得到的公共性质(属性,方法)结合起来,形成一个有机的整体。也就是我们通常动手写car类的过程。
继承:
通常我们通过抽象,封装所写出的类都是很基础,很一般的类(一般来说,我们写类就是盯着一般类写)。例如car类,它就是对汽车描述的一般类,因为现实中汽车还可以具体分为:小轿车,货车,大巴,火车等。那么,难道当我们需要建立一个火车类的时候,还要重新通过对火车的抽象,封装写出train类?不需要!此时我们应该在car类的基础上,对car类增加train的公共性质,然后利用car类写出train类。这就是一个 从一般到个别 的过程。
继承,就是用来处理 从一般到个别 的基本手段。即 使得特殊类(train类)既能共享一般类(car类)的属性和方法,又能具有特殊的属性和方法。或者说:类的继承机制,允许程序员在保持原有类特性的基础上,进行更具体更详细的说明。
多态:
多态就是对人类思维方式的一种直接模拟。例如,日常生活中说到的“打球”,其中的“打”对于不同的球(篮球,乒乓球,羽毛球)就有不同的意义,我们理解这个“打”是通过球的类型来理解的;如果仅说打球我们的确没有具体的概念,但如果说“打篮球”,“打羽毛球”,我们一定能知道这个“打”应该如何理解。例如:在car类中,我们定义了一个 “showtime()”方法,它作用是“显示当前的时间”。而在现实中,在某辆汽车里,我们的汽车可以显示:1.此时的北京时间;2.此次启动后,此时车已经行驶的时间;3.此时车载电台已经播放的时间。那么,这个showtime()显示的是上述3种时间中的哪一个?要想完成这个任务,就要利用 多态。
通过多态,我们可以在程序中模拟 人通过具体语境来识别空泛概念的某一具体含义。例如,要理解“打球”中的“打”的含义:在 球是“乒乓球”时,“打”就是 人在乒乓球台上,利用乒乓球拍,遵守乒乓球游戏规则的活动;在 球是“篮球”时,“打”就是 人在篮球场上,利用篮球,遵守篮球游戏规则的活动。在程序中,我们只要在“showtime()”中限定是在“1.北京时间;2.行驶时间;3.电台时间”中的某一情形,我们也能确定当前显示的时间是具体的某一类了。
广义上说,多态是指 一段程序能够处理多种类型对象的能力。 在C++中,有四种多态:强制多态,重载多态,类型参数化多态,包含多态。强制多态:将一种类型的数据强制转换成另一种类型的数据即 数据类型转换(显示;隐式);重载多态:给同一个名字赋予不同的含义;
包含多态:利用虚函数实现,虚函数是多态的精华;类型参数化多态:使用模板实现,模板可分为函数模板和类模板.
总的来说:
1.抽象:从现实中的对象提取公共性质
2.封装:将公共性质组装成程序中的类
3.继承:在程序中,对已有的一般类实现从一般到个别的具体化
4.多态:让类的方法具有依据不同情景表现处不同的具体功能