概念问题
C++/数据构造
1、简述你对“面向对象”和“面向过程”编程思想结识与思考用就可以了。
面向过程
就是分析出解决问题所需要环节,然后用函数把这些环节一步一步实现,使用时候一种一种依次调
面向对象是把构成问题事务分解成各个对象,建立对象目不是为了完毕一种环节,而是为了描叙某个事物在整个解决问题环节中行为。
例如五子棋,面向过程设计思路就是一方面分析问题环节:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回环节2,9、输出最后成果。把上面每个环节用分别函数来实现,问题就解决了。
而面向对象设计则是从此外思路来解决问题。整个五子棋可以分为 1、黑白双方,这两方行为是一模同样,2、棋盘系统,负责绘制画面,3、规则系统,负责鉴定诸如犯规、输赢等。第一类对象(玩家对象)负责接受顾客输入,并告知第二类对象(棋盘对象)棋子布局变化,棋盘对象接受到了棋子i变化就要负责在屏幕上面显示出这种变化,同步运用第三类对象(规则系统)来对棋局进行鉴定。
可以明显地看出,面向对象是以功能来划分问题,而不是环节。同样是绘制棋局,这样行为在面向过程设计中分散在了总多环节中,很也许浮现不同绘制版本,由于普通设计人员会考虑到实际状况进行各种各样简化。而面向对象设计中,绘图只也许在棋盘对象中浮现,从而保证了绘图统一。
功能上统一保证了面向对象设计可扩展性。例如我要加入悔棋功能,如果要改动面向过程设计,那么从输入到判断到显示这一连串环节都要改动,甚至环节之间循序都要进行大规模调节。如果是面向对象话,只用改动棋盘对象就行了,棋盘系统保存了黑白双方棋谱,简朴回溯就可以了,而显示和规则判断则不用顾及,同步整个对对象功能调用顺序都没有变化,改动只是局部。
再例如我要把这个五子棋游戏改为围棋游戏,如果你是面向过程设计,那么五子棋规则就分布在了你程序每一种角落,要改动还不如重写。但是如果你当时就是面向对象设计,那么你只用改动规则对象就可以了,五子棋和围棋区别不就是规则吗?(固然棋盘大小好像也不同样,但是你会觉得这是一种难题吗?直接在棋盘对象中进行一番小改动就可以了。)而下棋大体环节从面向对象角度来看没有任何变化。
固然,要达到改动只是局部需要设计人有足够经验,使用对象不能保证你程序就是面向对象,初学者或者很蹩脚程序员很也许以面向对象之虚而行面向过程之实,这样设计出来所谓面向对象程序很难有良好可移植性和可扩展性。
2、ADT是什么?简述你对“数据抽象”和“信息隐藏”结识
抽象数据类型(Abstract Data Type 简称ADT)是指一种数学模型以及定义在此数学模型上一组操作。抽象数据类型需要通过固有数据类型(高档编程语言中已实现数据类型)来实现。抽象数据类型是与表达无关数据类型,是一种数据模型及定义在该模型上一组运算。对一种抽象数据类型进行定义时,必要给出它名字及各运算运算符名,即函数名,并且规定这些函数参数性质。一旦定义了一种抽象数据类型及详细实现,程序设计中就可以像使用基本数据类型那样,十分以便地使用抽象数据类型。
抽象数据类型通过类(class)实现
? 程序设计语言对抽象数据类型支持是指容许顾客自定义具备如下特性数据类型:
1. 模块封装:The representation of,and operations on,objects of the type are defined in a single
syntactic unit
2. 信息隐蔽:The representation of objects of the type is hidden from the program units that use these
objects,so the only operations possible are those provided in the type's definition
3、const和static有什么作用?
const是一种C和C++语言核心字,它限定一种变量不容许被变化,即只读。使用const在一定限度上可以提高程序安全性和可靠性,也便于实现对此进行优化(如把只读对象放入ROM中)。const作为类型限定符,是类型一某些。
4、友元关系利与弊
如果将一种函数或一种类声明为另一种类友元,那么它就可以直接存取这个类对象中各种数据,而不必在乎这些数据封装级别,即无论是private,protected,还是public,有钱同使,有难同当。
5、C++多态实现
1. 用virtual核心字声明函数叫做虚函数,虚函数必定是类成员函数。
2. 存在虚函数类均有一种一维虚函数表叫做虚表。类对象有一种指向虚表开始虚指针。虚表是和类相应,虚表指针是和对象相应。
3. 多态性是一种接口各种实现,