C++面向对象编程介绍
Posted LC编程开发者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++面向对象编程介绍相关的知识,希望对你有一定的参考价值。
1 面向对象编程介绍
例如,开发一个单片机程序,要求读取串口的数据。那么,就可以使用C语言编写一个串口数据读取的函数,在串口中断函数中触发,读取寄存器的地址即可。对于这样的操作,使用C语言来编写就足够。
但是,当程序规模较大的时候,C语言就显得力不从心了。例如,编写一个12306的订票系统,使用C语言来编写,明显是错误的选择。但是,使用C++、JAVA、C#等高级语言来编写,就方便、快捷地构建出一个大型软件架构。
要构建一个大型的软件,必须使用面向对象的设计思想。虽然C语言也可以实现面向对象程序设计,但是,C++语言的特性,更容易编写面向对象程序设计。
下面随着对面向对象程序设计的深入学习,我们了解什么是面向对象程序设计。学习C++的语言特性,甚至,使用C语言来实现面向对象程序设计。
注意:此时刚刚开始介绍面向对象编程,介绍的都是“理论性”的知识。可以不用死记硬背。大概看看了解即可。
在后续学习C++语法编程的时候,会一点一点地体现这些面向对象编程的特性,体现这些理论性知识。所以,可以学习完了C++编程之后,再回头看看这些“理论性”的知识,就完全可以理解了。
1.1 什么是面向对象编程
面向对象的程序设计的思路和人们日常生活中处理问题的思路是相似的。在自然界和社会生活中,一个复杂的事物总是由许多部分组成的。例如,一部手机是由屏幕、外壳、CPU主板等部件组成的;一套住房是由客厅,卧室,厨房和卫生间等组成的;一个学校是由许多学院,行政科室和学生班级组成的。
当人们制造手机的时候,并不是先设计和制造CPU主板,再设计和制造屏幕,然后,再设计和制造外壳。而是,分别设计和制造CPU主板、屏幕、外壳。最后,把它们组装在一起。在组装时,各部件之间有一定的联系,以便协调工作。例如用户按下开机按键,CPU主板就启动,屏幕就点亮等等。这就是面向对象的程序设计的基本思路。为了进一步说明问题,下面先讨论几个有关的概念。
1.1.1 对象
客观世界中任何一个事物都可以看成一个对象(object),或者说,客观世界是由千千万万个对象组成的。对象可以是自然物体(如手机,房子,小狗等等),也可以是社会生活中的一项工作,例如做饭、开会等等。甚至一篇文章,一张图片,一项计划等都可视作对象。
例如,一个学校由教室、老师、学生等数据组成。这些数据都可以看做是一个对象。一个学校可以看做是一个系统。所以,对象是构建成系统的基本单位。
那么,当一个手机作为一个对象时,有如下两个特性:
(1) 手机的静态特征,例如,手机的外壳、屏幕、内存芯片等等,这种静态的特征称为:属性。
(2) 手机的动态特征,例如,开机、打电话、打游戏等等,这种动态特征称为:行为。
例如,用户使用手机打电话,就是要按下需要拨打的号码,最后,按下拨打电话的按键。这样的操作,就是用户给手机对象指定的信息,让手机对象进行拨打电话。那么,给手机对象的这些信息,我们一般称为:消息。
任何一个对象都应当具有这两个特性,即属性(attribute)和行为(behavior),它能根据外界给的信息进行相应的操作。一个对象往往是由一组属性和一组行为构成的。例如,一部手机是一个对象,它拥有外壳、屏幕、CPU主板等属性。而且,它可以没电的时候,自己关机;接受到来电的时候,铃声响起等行为。当用户操作手机时,可以给手机指定的消息,使用它拨打电话。
最终,我们可以看到,我们生活周边的所有东西,都可以看成是一个对象。对象可以拥有自己的属性和行为。而且,能够受到其他对象的影响,执行不同的行为。
所以,面向对象程序设计的思想,更接近于人类日常行为的工作方式。更接近于人类的思考方式。
使用面向对象的程序设计方法设计一个复杂的软件系统时,首要的问题是确定该系统是由哪些对象组成的,并且设计这些对象。在C++中,每个对象都是由“数据和函数(即操作代码)”这两部分组成,如下图:
数据体现了前面提到的“属性”,例如,一个三角形对象,它的3个边长就是它的属性。函数是用来对数据进行操作的,以便实现某些功能。例如,可以通过边长计算出三角形的面积。计算三角形面积和输出有关数据就是前面提到的“行为”,在程序设计中称为“方法(method)或者函数”,调用对象中的函数就是向该对象发送一个消息(message),要求该对象执行某一个动作。
所以,我们可以总结:
- 对象是由属性和行为组成;
- 对象的属性,在C++编程中称为:数据;
- 对象的行为,在C++编程中称为:函数;
1.1.2 封装和信息隐藏
例如一部手机,用户只是看到它的外壳、屏幕,但是,却不可以看到内部的CPU芯片等电子元器件。那么,对于手机这个对象来说,它是有些属性是给外界看见,有些属性是给外界屏蔽的。对于用户来说,我们只需要按下开机键,就可以让手机开机。手机内部的开机动作和原理,用户根本不需要知道。那么,这样就大大降低了用户对手机使用的复杂度。
所以,对于手机这个对象来说,它有些属性和行为是隐藏的,有些是开放给用户使用的。这是一个手机对象的基本定义。
那么,我们在定义一个手机对象的时候,要周密地考虑如何进行封装,把不必要让用户知道的部分“隐藏”起来。也就是说,“把对象的内部实现和外部行为分隔开来”。人们在外部进行控制,而具体的操作细节是在内部实现的,对用户是不透明的。
面向对象程序设计方法的一个重要特点是“封装性(encapsulation)”,所谓“封装”,指两个方面的含义:
(1) 将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相互独立,互不干扰。
(2) 将对象中某些部分对外隐蔽,即隐蔽其内部细节,只留下少量接口,以便与外界联系,接收外界的消息。
这种对外界隐蔽的做法称为:信息隐蔽(informationi hiding)。信息隐蔽还有利于数据安全,防止无关的人了解和修改数据。
C++对象中的函数名就是对象的对外接口,外界可以通过函数名来调用这些函数来实现某些行为(功能)。
1.1.3 抽象
在程序设计方法中,常用到“抽象(abstraction)”这一个名词,其实“抽象”这一概念并不抽象,是很具体的,人们对之是司空见惯的。例如,我们常用的名词“人”,就是一种抽象。因为,世界上只有具体的人,如张三,李四,王五。把所有国籍为中国的人归纳为一类,称为“中国人”。这就是一种抽象,再把 中国人,美国人,日本人等所有国家的人抽象为“人”。
在实际生活中,你只能看到一个一个具体的人,而看到不到抽象的人。抽象的过程是将有关事物的共性归纳,集中的过程。例如,凡是有轮子,能滚动前进的陆地交通工具统称为“车子”。把其中用汽油发动机驱动的抽象为“汽车”,把用马拉的抽象为“马车”。“整数”是对1,2,3等所有不带小数点的数的抽象。
抽象的作用是:概况、总结同一类事物的相同本质。如果你会使用自己家里的电视机,你到别人家里看到不同牌子的电视机,你肯定也能对它进行操作,因为它具有所有电视剧所共有的特性。C和C++中的数据类型就是对一批具体的数的抽象。例如,“整型数据”是对所有整数的抽象。
1.1.4 继承和重用
如果汽车制造厂想生产一款新型汽车,一般是不会全部从头开始设计的,而是选择已有的某一型号汽车为基础,再增加一些新的功能,就研制成了新型号的汽车。这是提高生产效率的常用方法。
如果在软件开发过程中已经建立了一个名为A的“类”,又想另外建立一个名为B的“类”,而类A与类B内容基本相同,类B只是在类A的基础上增加一些属性和行为,显然不必再从头设计一个新类,而只需在类A的基础上增加一些新内容就可以得到类B。
这就是面向对象程序设计中的“继承”机制。利用继承可以简化程序设计的步骤,举个例子:如果大家都已经充分认识了猫的特征,现在要叙述“小猫”的特征,显示不必从头介绍什么是猫,而只要说明“小猫是年龄小的猫”即可。这就简化了人们对事物的认识和叙述,简化了工作程序。
C++提供了继承机制,采用继承的方法可以很方便地利用一个已有的类建立一个新的类,这就可以重用已有软件中的一部分,甚至大部分。大大节省了编程工作量。这就是常说的“软件重用(software reusability)”的思想,不仅可以利用自己过去所建立的类,而且,可以利用别人使用的类或存放在类库中的类,对这些类做适当加工即可使用,大大缩短了软件开发周期,对于大型软件的开发具有重要意义。
1.1.5 多态性
如果有几个相似而不完全相同的对象,有时人们要求在向它们发出同一个消息时,它们的反应各不相同,分别执行不同的操作。这种情况就是“多态现象”。例如,张三、李四、王五是同一个学校的学生,那么,他们拥有基本相同的属性和行为。但是,他们不是同一个班的同学,所以,当听到上课铃响的时候,他们会分别走向不同的3个教室。
所以,张三、李四、王五得到“上课铃响”这个相同的消息时,分别执行了不同的动作,这种状态就称为:多态性。
例如,在Windows系统下,用鼠标双击一个文件对象(这就是向对象传送一个消息),如果对象是一个可执行文件,则会执行此程序,如果对象是一个文本文件,则启动文本编辑器并打开该文件。类似这样的情况很多的。
在C++中,所谓“多态性(polymorphism)”是指:由继承而产生的相关的不同的类,其对象对同一消息会作出不同的响应。多态性是面向对象程序设计的一个重要特征,能增加程序的灵活性。
韦凯峰 Linux C/C++ 程序设计教程,Linux 系统编程,Openwrt 系统开发,微信:13926572996,QQ:1523520001,博客:www.mylinux.vip
以上是关于C++面向对象编程介绍的主要内容,如果未能解决你的问题,请参考以下文章