与LSGO一起学“第1章 初识C++(1.3 C++与C有什么不同)”

1.3 C++与C有什么不同

很多初学者认为C++仅仅是C语言的扩充和补充,如果这么想,哪就大错特错了。C++C语言最大的不同是在解决问题时思维方式的不同,C++采用面向对象思维,而C语言采用面向结构思维。

面向结构思维的宗旨就是将一个大程序拆分成一个个很小的结构,这里有必要说明一下结构。结构是什么呢?结构就是实现一个或多个功能的代码块,比如说计算“1+1=?”,假如算出等于2,那么就是实现了一个功能,而这个实现“1+1=2的代码块就可以看作是一个结构,或者叫做方法。

面向结构思维就是将一个大程序划分成若干个很小的结构,每个结构都完成一个或多个功能,所有结构集合起来就可以完成一个大功能。

这样的编程思想在80年代前期还是可以的,但是到了80年代后期,它的弊端就暴露出来了。

首先是程序的可维护性方面,由于结构化编程仅仅是将大程序细化成若干个小结构,而并没有考虑数据的安全性问题,比如说数据还是属于整个程序的,这样就导致某个地方对数据的修改,会对整个程序造成难以预料的影响。举个例子,某个游戏怪物的生命值设定为100,而这种怪物在游戏中的数量为30个,由于生命值是属于整个程序的,而不是某个具体的怪物的,所以主角每砍怪物一下,30个怪物的生命都会下降10点,而主角杀死一个怪物以后,30个怪物都会死亡,这显然是不合理的。

其次是程序的可重用性,由于结构化编程并没有将相关的数据和结构看作一个整体,所以无法利用已有的代码来创造新的代码。打个比方,某游戏公司用结构化的方式创造了一个怪物,这个怪物是由若干个结构和若干个数据组成,游戏公司希望在它的基础上再创造一个新的怪物,这个新的怪物仅仅是比旧的怪物多一个功能——跳跃,看上去要实现这个怪物似乎很简单,但是由于结构化编程并没有将怪物看作是一个整体,所以他们需要重新编写这个新怪物。

随着软件工程的发展,软件越来越大,数据越来越多,面向结构所带来的问题也越来越多,越来越严重,曾一度导致“软件危机”,面向对象就是为了解决“软件危机”而创造的,面向对象思想增加了大量的编程理念,它有能力将一个大程序拆分成若干个对象,每个对象中再封装部分数据和实现功能的方法,一个对象想要访问另一个对象的数据,必须争得该对象的同意,而该对象中数据的改变也不会影响到其他对象,从而解决了数据的安全性问题;另一方面,面向对象允许将具有相同特征的对象划分为一类,而同一类的对象又可以继续向下派生,父生子,子生孙,代码不经修改即可重复利用,从而实现了代码的重用。拿游戏做个比方,游戏中的30个怪物可以看作是30个对象,每个对象都拥有一个生命值,这样即使其中一个怪物的生命发生变化,也不会影响到其他的怪物。同时由于对象是一个整体,所以我们要创造一个新怪物时,只需要在原来的怪物身上增加新功能即可,而不用重写该代码。

面向对象的另一个优点是支持多态性,多态性是什么呢?多态性是指不同的对象采取相同的方法会导致不同的行为或结果。比如说我们要模拟一个足球游戏,不同的足球运动员代表不同的对象,而相同的方法则指的是射门这同一动作,由于运动员技术水平不同,所以技术好的运动员进球的概率要高些,而技术差的运动员则踢飞的概率要高些。

你可能感兴趣的:(C++)