当前位置:蜗牛素材网>综合资讯>图文>正文

c语言面向过程和对象:学习刷题1--面向对象的基本概念

人气:400 ℃/2024-02-24 01:06:49

一、前言

一直以来,C 编程语言被大家误传为很难,增加了大家学习的心理负担。其实《C 程序设计》的二级考试、自学考试或期末考试等都只考查学生对基本概念的理解,很少涉及这些概念的综合应用。而大家通常看书较多做题很少,造成多数人对这些概念理解不到位。基于这一观察,我们推出有助于大家考试的试题系列。

二、面向对象的基本概念

提到面向对象,大家都会想到抽象、封装、继承与多态性四个概念,感觉自己很熟悉。但当要求解释具体内容时,多数人又感觉无从说起,即只可意会、不可言传!

那么,怎样简单、有效地理解面向对象的主要思想呢?

2.1面向对象的思想

众所诸知,计算机发展到一定阶段后,编写软件的目的发生了根本变化:由原来的控制计算机转变成模拟实现世界,即将现实生活中的某些现象或场景在计算机中模拟出来。例如,实现生活中的商店购物过程对应于互联网的天猫店购物,现实生活中的赛车活动对应于计算机中的赛车游戏等。

然而,在计算机中所模拟场景的逼真程度,取决于我们对现实世界的认识程度。因此,我们首先面临的问题:怎样有效地认识现实世界的现象或场景?

唯物辩证法认为:世界是由物质所组成的,并且物质之间存在普遍联系。物质是指自然界客观存在的事物,它不以人们的意识为转移,即不管人们是否看到或意识到某一物质,它都真实存在于自然界。将唯物辩证法引入到计算机编程中,就形成了面向对象的系统分析:所模拟世界是由对象所组成的,对象之间存在普遍联系

具体应用时,我们可以对这句话进行深入分解,作为我们认识现实世界的指导方针。“所模拟世界是由对象所组成的”可以被分解成三个层次:1、所模拟世界是由哪些对象所组成的?据此,我们可以分析出所有的研究对象。2、每一个对象有哪些状态?3、每一个对象有哪些行为?通过这两步的分析,我们可以深入认识每一个研究对象的具体内容。同理,“对象之间存在普遍联系”也可以被分解成:1、对象之间是否存在依赖关系,比如是否存在一对一、一对多或多对多的关系?2、对象之间是否存在组合关系,比如结构上、空间上或逻辑上是否存在整体与部分的关系?3、对象之间是否满足现实生活中的分类常识,比如是否存在一般与特殊的关系或同属于一大类下的不同子类?4、对象之间是否存在协作关系等等。利用这种面向对象的思维方式,可以让我们有计划、有步骤地分析现实世界,而这正是软件工程的真正含义。

2.2抽象

何为抽象?谭浩强教授的教材写道:抽象的过程是将有关事物的共性归纳、集中的过程;抽象的作用是表示同一类事物的本质。那么,我们怎样理解这一说法呢?

针对日常的教学活动(极端简化版),我们采用面向对象的分析方法,可以分析很多对象:张三、侯俊杰、C语言、李四、谭浩强、C 语言,…。面对如此之多的对象,我们通常都是采用归纳、总结的方法进行分类处理,其分析过程如图1.1所示。通过分类处理,我们可以发现这些对象都归属于学生、教师和课程三种类型之一。其好处在于:我们不需要面对千千万万个内容各异的具体对象,只需要将精力集中在每种类型的共性方面。因此,可以极大地方便与此项目相关人员之间的交流。

图1.1抽象过程演示

综上所述,抽象是对对象进行分类、归纳的处理过程,提取出不同具体对象的共性,形成对同一类对象进行描述的数据类型(类)

2.3封装与信息隐藏

何为封装?谭浩强教授的教材写道:所谓“封装”,指两方面的含义:一是将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相对独立,互不干扰。二是将对象中某些部分对外隐藏,即隐藏其内部细节,只留下少量接口,以便与外界联系,接收外界的消息。

第一种说法讲的是对象成员变量与成员函数的实现关系,第二种说法讲的是对象的信息隐藏方面(即对象成员的公有性和私有性)。相对于信息隐藏而言,初学者更应该理解对象成员变量与成员函数的实现关系。

如前所述,现实世界的对象具有状态与行为两方面的属性。C 语言采用成员变量来保存对象的状态,使用成员函数来表达对象的行为。为何将这些变量和函数称为对象的成员变量和成员函数呢?因为C 语言通过封装机制将这些变量和函数形成一个独立的逻辑单元:每一个对象的成员变量和成员函数都是相对独立、互不干扰,对象的成员函数可以直接访问本对象的成员变量或直接调用本对象的成员函数。在C 语言中,这一现象是通过this指针来实现的。

2.4继承与组合

为了优化代码结构,提高代码的重用率,C 语言引入了继承和组合(聚合)机制。在C语言中代码重用的单元是函数,而在C 语言中为对象或者类。

面向对象语言的组合机制对应于现实世界中整体与部分关系。例如,物理上整体事物和它的组成部分(汽车和发动机),组织机构和它的下级组织(公司和部门),团队(组织)和成员(森林和树)等等。在组合机制中,是整体对象利用部分对象的功能。

而继承关系对应于现实世界中的一般与特殊关系,其中一般对应于基类,而特殊对应于派生类。例如,学生类为基类,小学生类、中学生类、大学生类都是派生类。派生类通过继承关系拥有基类的所有属性,即拥有基类的所有成员变量和成员函数。在继承关系中,如果从对象角度讲,派生类对象是基类对象的一种(is-a),比如狗是动物的一种;但是从类的角度讲,基类的所有成员都必须符合所有派生类,即基类只能具有所有派生类共有的成员。

2.5多态性

现实生活中,多态性是指同一物质在不同情况下表现出多种形态。在C 语言中,多态性是指通过同一函数名调用函数,在不同情况下调用不同的实现函数,即执行不同的代码。从实现的角度看,多态性可以分成静态多态性和动态多态性。

静态多态性是通过重载函数实现的。在编译重载函数调用时,编译器通过实参匹配形参的方式确定要调用的哪个函数。因此,这类多态性也称为编译时的多态性

动态多态性是通过虚函数实现的。通过基类指针调用虚函数时,基类指针指向哪个类的对象,就调用这个类中实现的函数。而基类指针所指向的对象,在程序编译阶段是不确定的,只有在程序运行时才能确定。因此,这类多态性也称为运行时的多态性

三、试题解析

1.C 语言对C语言做了很多改进,C 语言相对于C语言的最根本的变化是( )。

A.增加了一些新的运算符

B.允许函数重载,并允许设置默认参数

C.规定函数说明符必须用原型

D.引进了类和对象的概念

正确答案:D

解析:C 语言在完全兼容C语言的基础上进行了一些扩展,如增加了一些运算符、关键字、重载函数等知识,但最重要的特点是引入了面向对象的编程思想。因此本题的正确答案是D。

2.下列描述中,属于面向对象思想主要特征的是( )。

A.继承性

B.灵活性

C.可重用性

D.健壮性

正确答案:A

解析:面向对象思想的主要特征有:抽象、封装、继承和多态。答案选A。

3.下列关于类的叙述中,错误的是( )。

A.类是一种抽象数据类型

B.类是面向对象程序设计的核心

C.类与类之间不能形成层次结构

D.类可以实现对数据的封装和隐藏

正确答案:C

解析:类设计之初,就是为了体现面向对象的思想,将有相似属性和行为的实体抽象为一个类,包含这一类实体的共有属性和行为,选项A、B正确。类的三大特性:封装性、继承性、多态性,选项D正确。类的继承属性就能使类形成层次结构,故C选项错误,故答案为C选项。

4、下列关于基类派生类的关系和叙述中,正确的是( )。

A、每个类最多只能有一个直接基类

B、派生类中的成员可以访问基类中的任何成员

C、基类的构造函数必须在派生类的构造函数体中调用

D、派生类除了继承基类的成员,还可以定义新的成员

正确答案:D

解析:本题考查派生类与基类的关系。在C 语言中,派生类可以有多个直接基类。同时,尽管派生类拥有基类的所有成员,但并不能访问基类的私有成员。如果基类中定义了缺省构造函数或根本没有定义任何一个构造函数时,在派生类构造函数的定义中可以省略对基类构造函数的调用,而由编译器在编译时自动加上。所以本题答案为D。

5.下列选项中,调用虚函数时会产生运行时的多态性的是( )。

A.对象名

B.派生类名

C.基类指针

D.派生类指针

正确答案:C

解析:运行时的多态性是通过基类的指针或者引用来调用虚函数。因此,正确选项为C。

四、试题测试

1.下列哪个要素不是面向对象的关键要素( )。

A.模块化 B.抽象性 C.封装性 D.继承性

2.面向对象程序设计思想的主要特征中不包括( )。

A.封装 B.多态性 C.继承性 D.功能分解,逐步求精

3.下面关于类和对象说法不正确是( )。

A.类由数据与函数组成 B.一个对象必属于某个类

C.对象是类的实例 D.一个类的对象只有一个

4.面向对象中的“对象”是指( )。

A.行为抽象 B.数据抽象

C.行为抽象和数据抽象的统一 D.行为抽象和数据抽象的对立

5、面向对象程序设计方法的四个基本特征是( )。

A、抽象、封装、重载和多态 B、抽象、封装、继承和多态

C、抽象、封装、继承和共享 D、抽象、封装、继承和代码重用

--------------------------------------------------------------------------

欢迎大家提出意见、指出错误或提供更好的题目,只有大家的共同努力,才能帮助更多人掌握C 的基本概念,顺利通过考试!

搜索更多有关“c语言面向过程和对象:学习刷题1--面向对象的基本概念”的信息 [百度搜索] [SoGou搜索] [头条搜索] [360搜索]
本网站部分内容、图文来自于网络,如有侵犯您的合法权益,请及时与我们联系,我们将第一时间安排核实及删除!
CopyRight © 2008-2024 蜗牛素材网 All Rights Reserved. 手机版