面向对象程序设计课程期末复习提要_第1页
面向对象程序设计课程期末复习提要_第2页
面向对象程序设计课程期末复习提要_第3页
面向对象程序设计课程期末复习提要_第4页
面向对象程序设计课程期末复习提要_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、面向对象程序设计课程期末复习提要中央电大理工部计算机教研室面向对象程序设计课程是中央电大计算机科学与技术专业(本科)一门必修的专业基础课。该课程主要介绍如何用语言进行面向对象程序设计,因此语言的介绍是本书的重点,也是学员需要掌握的重点。下面按照主教材内容次序给出具体复习要求,供同学们进行期末复习时参考。各部分复习提要第一部分 程序设计基础 复习知识点:C+程序的基本结构基本数据类型常量、变量的定义与使用常用运算符的使用表达式的分类和使用简单的输入输出 复习要求:1 理解:C+程序的基本组成。2 应用:能够编写简单的程序,能完成简单数据类型数据输入、利用变量存放输入数据,利用常量存放固定数据,利

2、用运算符进行简单的运算,并能够将结果输出(如书中2.6, 2.7题)。3 应用:能进行比较复杂的表达式运算(如书中3.1,3.2,3.3题* )。第二部分 语句与操作流程复习知识点:语句的分类分支语句循环语句转移语句 复习要求:1 理解:语句按功能分为:操作运算语句和流程控制语句,其中操作运算语句按复杂程度分为简单语句和复合语句。2 应用:能够根据程序要求选择合适的流程控制语句(如书中4.2,4.4,4.5题)。3 应用:能够用多种循环语句实现一种循环的程序要求(如书中4.1题)。4 综合应用:综合运用各种语句完成比较复杂的程序逻辑(如书中4.9题)。第三部分 函数复习知识点:模块化程序设计函

3、数的定义函数的定义与函数原型函数参数的类型与传递方式全局变量和局部变量函数调用机制递归函数函数重载函数的默认参数静态局部变量复习要求:1 理解:模块化程序设计与函数的关系。2 理解:默认参数的含义与用法,能够在程序中正确使用默认参数。3 理解:全局变量、局部变量、静态变量的含义,能够在程序中正确选择使用静态、局部和全局变量。4 应用:将一些功能明确的代码封装在函数中(如书中5.1,5.2,5.3题)。5 应用:利用递归函数来简化程序设计(如书中5.7题)。6 应用:利用函数重载来优化程序设计(如书中5.8题)。7 应用:根据给定要求编制满足功能需求的函数(如书中5.6题)。第四部分 程序结构复

4、习知识点:外部存储类型extern静态存储类型static标识符的作用域标识符的可见性与生命期头文件与多文件结构编译预处理 复习要求:1 理解:标识符的作用域的含义,作用域与标识符的可见性之间的关系。能够指出给定程序中标识符的作用范围,包括局部作用域、函数作用域、文件作用域(如书中5.7题)。2 理解:标识符的三种生命期:静态、局部和动态生命期,能指出给定程序中标识符的生命期。3 理解:多文件结构,能在程序设计中合理利用多文件来进行模块划分。能正确使用外部存储类型和静态存储类型(如书中6.1,6.2,6.3题)。4 理解:编译预处理的概念,能在程序中合理使用#include预处理指令,看懂#d

5、efine, #if, #ifndef, #else, #undef, #elif等指令。5 综合应用:能综合运用头文件、外部变量、静态变量来组织多文件结构的程序(如书中6.3 题)。第五部分 引申数据类型-数组、指针和引用复习知识点:数组的概念、定义、初始化向函数传递数组多维数组指针的概念、定义、初始化指针变量的空间申请和释放&和*运算符的使用字符指针与字符串操作命令行参数引用的定义、初始化用引用向函数传递参数引用返回值 复习要求:1 理解:数组、指针和引用各自的含义和适用场合。能够在程序设计中根据需要选择合适的数据类型。2 理解:程序命令行参数的意义和定义方式,能够正确地使用命令行

6、参数。3 理解:多维数组的含义和其元素在内存中的存放顺序,能够在程序中选择使用多维数组。4 应用:能编制数组元素排序的算法和矩阵运算的算法(如书中7.4.7.7题)。5 应用:能够编制字符串操作的程序(如书中8.5,8.6题),能够利用标准库函数中的字符串操作函数进行编程。6 应用:能够在程序中动态申请空间,并进行合适的指针操作(如书中8.9题)。7 应用:能够编制将引用作为函数参数和返回值的应用程序(如书中9.1,9.2,9.3题)。8 综合应用:在程序中综合应用数组、指针和引用。第六部分 复杂数据类型-结构与类复习知识点:结构的定义、初始化与使用结构指针、结构数组结构作为函数参数与返回值用

7、结构实现链表类的定义类与结构的区别和联系类成员的访问控制内联函数对象的生成类的作用域类的构造函数与析构函数静态数据成员和函数友元类、对象与面向对象程序设计this指针复习要求:1 理解:使用结构的场合、结构的概念、结构成员的访问方式,给结构赋值的方式、结构作为函数参数与返回值的方式,能够在程序中正确选择使用结构。2 理解:结构和指针、结构数组的使用方式,能在程序中熟练使用。3 应用:利用结构实现链表操作。能够实现链表结构的定义、链表的创建、遍历操作(如书中10.3,10.4,10.5,10.6)。4 理解:类成员的访问控制带来的封装性。能够在程序设计中根据具体情况选择使用合适的访问控制。5 综

8、合应用:能够根据程序要求构造满足要求的类。在构造过程中充分考虑构造函数和析构函数的使用、成员访问控制的运用、内联函数的运用、静态成员的选用(如书中12.1,12.2题)。6 综合应用:能够根据要求构造多个类完成程序要求的功能,多个类之间可以发生一定的关系,如一个类作为另一个类的成员、一个类使用另一个类的服务等(如书中12.3,12.4题)。第七部分 继承与多态性复习知识点:结构化程序设计和面向对象程序设计思想的不同继承的含义派生类的定义和使用派生类的构造单继承与多继承的概念静态联编与动态联编的各自的含义和它们的区别静态联编与函数重载动态联编与虚函数多态性抽象类与纯虚函数复习要求:1 理解:继承

9、的含义和使用条件,继承对于面向对象程序设计的影响。能够在程序设计中适时选择利用继承减少工作量,提高程序设计效率。2 理解:派生类构造过程中的类成员的访问控制(只要求掌握公有继承的访问控制),保护成员在类继承中的作用。能够准确合理地确定类成员的访问控制特征。3 理解:静态联编和动态联编各自的含义。在程序设计中能够正确地选择使用函数重载和虚函数。4 应用:能利用面向对象思想按给定要求构造类(如书中13.2题)。5 应用:能够根据给定要求构造类的继承层次,并完成一定的程序逻辑(如书中16.4, 16.5, 16.6题)。6 综合应用:能够综合利用继承、虚函数、动态联编等语言机制完成比较简单的面向对象

10、程序设计(如16.7题)。第八部分 运算符重载复习知识点:运算符重载的含义与定义方式运算符重载的必要性引用在重载中的作用友元重载运算符成员运算符重载复习要求:1 理解:运算符重载的必要性。能够在程序设计中适当选择进行运算符重载。2 理解:引用在运算符重载中的作用。引用作为参数和返回值的好处和用法。3 应用:能够根据所给要求为给定类定义运算符成员函数和非成员运算符函数。在定义过程中注意引用的使用(如书中18.118.4题)。第九部分 文件输入输出复习知识点:C+的标准I/O流istream,ostream,iostream的关系fstream,ifstream,ofstream三者的关系以及它们

11、与上面三者的关系文件I/O流的使用文件的打开、关闭、定位文件的输入输出重载插入和析取运算符复习要求:1 理解:C+标准I/O流所包含的类以及预先定义的流对象。能够在程序设计中熟练运用cin、cout流进行输入输出。2 理解:文件I/O流的作用和使用方式,能在程序设计中熟练运用文件流进行操作。3 应用:能够根据程序要求进行文件的打开、关闭、定位等操作,能够利用插入、析取以及各种成员函数进行文件内容的输入输出操作(如书中 19.1)。4 应用:能够通过重载插入和析取运算符进行自定义类的输入输出操作 (如书中19.2)。第十部分 模板复习知识点:函数模板和类模板的定义格式,函数模板和模板函数的区别,

12、类模板和模板类的区别,类模板的实例化;重载模板函数;函数模板和类模板的简单应用。复习要求: 理解:函数模板和类模板的概念,重载模板函数的含义;理解:函数模板和类模板的定义格式和使用方法;应用:会分析出已定义的函数模板和类模板的功能,能够写出使用它们的程序的运行结果。第十一部分 面向对象程序设计环境复习知识点:程序开发的全过程错误定位与调试C+语言基本内容复习要求:给定一个程序要求,或者给定带错误的程序,要求学员在规定时间内在计算机上完成程序的编制(或修改)并调试运行通过,得到正确的结果。期末考试题型及解答样例是非题样例 1. 头文件中一般存放着变量和常量的定义、函数的原型以及类的定义。 2.

13、派生类的成员函数可以直接访问基类的所有成员。 3. 函数的参数和返回值类型可以是简单数据类型,也可以是指针、引用、数组和类。 4. 程序的编译是以文件为单位的,因此将程序分到多个文件中可以减少每次对程序修改所带来的编译工作量。 5. 如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型相同,那么,这个函数自动继承基类中虚函数的特性。 6. 若已经把类AA定义为类BB的友元类,则允许AA类中的所有成员函数访问类BB中的私有成员。 答案:1. 错 2. 错 3. 错 4. 对 5. 对 6. 对填空题样例 下面是一个求数组元素之和的程序。主程序中定义了并初始化了一个数组,然后计算该数组各

14、元素的和,并输出结果。函数sum计算数组元素之和。填充程序中不完整的部分。_A_int sum(int ,int);void main()int ia5 = 2,3,6,8,10; B ;sumOfArray = sum(ia,5);cout << "Sum of array:" << sumOfArray << endl;int sum(int array,int len)int iSum = 0;for(int i = 0; C ; D ) E ;return iSum; 答案:A#include <iostream.h>

15、Bint sumOfArray;Ci < lenDi+EiSum += arrayi;阅读理解题样例 程序1: / static int i = 20; int x; static int g(int p) return i + p; void f(int v) x=g(v); / #include <iostream.h> extern int x; void f(int); void main() int i=5; f(i); cout << x; 回答以下问题: 1. 程序的运行结果是什么样的? 2. 为什么文件中要包含头文件<iostream.h&g

16、t;? 3. 在函数main()中是否可以直接调用函数g()?为什么? 4. 如果把文件中的两个函数定义的位置换一下,程序是否正确?为什么? 5. 文件和中的变量i的作用域分别是怎样的?在程序中直接标出两个变量各自的作用域。 答案: 1. 程序的运行结果:252. 因为程序中需要利用cout对象进行输出,而cout是在C+标准I/O库iostream中定义的类ostream的一个对象。3. 在函数main()中不可以直接调用函数g(),因为g()是静态函数,只在它所在的文件内可见。4. 如果把文件中的两个函数定义的位置换一下,程序不正确,因为C+规定所有使用的变量和函数需要先声明,后使用。在函

17、数f中用到了函数g,所以函数f不能出现在函数g的定义或声明之前。5. 文件中的变量i的作用域从它的定义开始到文件结束。中的变量i的作用域从它的定义开始到main函数结束。 程序2:/*文件list.h*/ class AA private: int * a; int len; const int MaxLen; public: AA(int Max_length = 10):MaxLen(Max_length) a = new intMaxLen; len=0; AA() delete a; bool Insert(int data); int Delete(int& data); v

18、oid PrintAA(); void PrintAA(char *); bool IsEmpty() return len=0; bool IsFull() return len=MaxLen; int GetLen() return len; int GetMaxLen() return MaxLen; int operator (int i) return ai; int GetSum(int i); ; /*文件list.cpp*/ #include <iostream.h> #include<stdlib.h> #include "list.h&qu

19、ot; bool AA:Insert(int data) if (len=MaxLen) cout<<"overflow!"<<endl; return false; alen=data; len+; return true; int AA:Delete(int& index) if (len=0) cout << "No,Can't be deleted!"<< endl; return 0; index=a0; for(int i=1; i<len; i+) ai-1=ai; le

20、n-; return 1; void AA:PrintAA() for(int i=0; i<len; i+) cout<<ai<<" " cout<<endl; void AA:PrintAA(char *str) for(int i=0; i<len; i+) cout<<ai<<" " cout<<"-"<<str<<"len="<<len<<endl; int AA:GetSu

21、m(int i) if(i>len) cout<<"Error!"<<endl; exit(1); int sum=0; for(int j=0; j<i; j+) sum+=aj; return sum; /* 文件main.cpp */ #include <iostream.h> #include<stdlib.h> #include "list.h" void main() AA x; AA y(16); if (x.IsEmpty()&& y.IsEmpty() cout

22、<<"Lists are empty when initialized!"<<endl; else return; int i,k; for(i=0; i<x.GetMaxLen(); i+) x.Insert(3*i); for(i=0; i<y.GetMaxLen(); i+) y.Insert(5*i-1); if (x.IsFull() && y.IsFull() cout<<"Lists are full!"<<endl; else cout<<"

23、Lists are not full!"<<endl; for(i=0; i<(y.GetMaxLen()/2; i+) y.Delete(k); x.PrintAA("List_x "); y.PrintAA("List_y "); for(i=0; i<(y.GetMaxLen()/2; i+) y.Insert(xi); y.PrintAA(); cout<<x.GetSum(5)<<' '<<y.GetSum(5)<<endl; 写出执行此程序所显示

24、的结果:答案:Lists are empty when initialized!Lists are full!0 3 6 9 12 15 18 21 24 27 -List_x len=1039 44 49 54 59 64 69 74 -List_y len=839 44 49 54 59 64 69 74 0 3 6 9 12 15 18 2130 245程序3: 下面的文件queue.h是一个队列类模板Queue的完整实现。在这个文件中首先定义了一个队列元素类模板QueueItem,然后在这个类的基础上定义了队列类模板Queue。在Queue中使用链表存放队列的各个元素,front指针指

25、向链表的第一个节点元素,back指针指向链表的最后一个节点元素,成员函数add()将一个新节点元素加入到队列结尾,remove()从队列开头删除一个节点元素。为方便起见,程序中加上了行号。阅读程序,根据程序后面的问题作出相应解答。/*-/* 文件queue.h */*-/1 template <class Type>2 class Queue;3 /* 定义模板类QueueItem */4 template<class Type> 5 class QueueItem6 7 public:8 QueueItem(const Type & elem):item(el

26、em) 9 QueueItem() 10 private:11 Type item;12 QueueItem * nextItem;13 friend class Queue<Type>14 ;15 /* 定义模板类Queue */16 template <class Type>17 class Queue 18 public:19 Queue():front( NULL), _(A)_ 20 Queue();21 Type remove();22 void add(const Type &);23 bool is_empty() const return _(

27、B)_ ; 24 private:25 QueueItem<Type> *front;26 QueueItem<Type> *back;27 ;28 /模板类Queue的函数成员remove()的实现29 /从队列头取出一个节点,并返回该节点的值30 template<class Type>31 Type Queue<Type>:remove()32 33 QueueItem<Type> *pFront;/指向头节点的临时指针34 Type retVal;/返回值35 _(C)_;36 retVal = front->item;

28、37 front = front->nextItem;38 delete pFront;39 return retVal;40 41 /模板类Queue的函数成员add()的实现42 template<class Type>43 void Queue<Type>:add(const Type & newItem)44 45 QueueItem<Type> *pNew = new QueueItem<Type>46 pNew->item = newItem;47 _(D)_;48 if (front = NULL)49 fron

29、t = back = pNew;50 else51 52 back->nextItem = pNew;53 _(E)_;54 55 56 57 template<class Type>58 Queue<Type>:Queue()59 60 QueueItem<Type> *p = front, *q;61 while(p != NULL)62 63 q = p->nextItem;64 delete p;65 p = q;66 67 问题1:(每个填空3分,共15分) 程序中有几处填空,将它们完成。(A)_(B)_(C)_(D)_(E)_ 问题2

30、:(本小题3分)题中程序第1,2行为什么要说明一下类模板Queue?如果没有这两行语句,程序还正确吗? 问题3:(本小题4分)程序第22,23行各有一个const,它们各自表示什么含义: 问题4:(本小题3分)程序中模板类Queue的析构函数主要做了什么事情?为什么要这么做? 问题5:(本小题5分,每答对一个给1分)下面的程序使用了queue.h文件中定义的类模板,说明程序中哪些定义队列对象的语句是不正确的,哪些是正确的。#include “queue.h”void main()Queue q1;/1Queue<int> q2;/2Queue<int> q3(100);

31、/3Queue<int> q4100;/4Queue<int> *q5 = new Queue<int>/5/.delete q5;语句号12345对/错 答案: 问题1:答案为:(A) back(NULL)(B) front = NULL 或 back = NULL(C) pFront = front(D) pNew->nextItem = NULL(E) back = pNew 问题2: 答:不正确。因为在类QueueItem模板类的定义中用到了模板类Queue,而此时Queue还没有定义,所以要先声明一下,告诉编译程序Queue是一个模板类,它将

32、在程序的其他地方定义。如果没有这个说明,编译程序就不知道标识符Queue代表什么样的含义了。 问题3: 答:第22行的const修饰的是函数的参数,表示在这个函数体中不能改它所修饰的参数所对应的实际参数的值。第23行的const修饰的是模板类Queue的成员函数is_empty(),它表示在函数is_empty()的函数体中不能改变任何数据成员的值。 问题4: 答:析构函数中主要是释放链表中存放的各个节点的空间。因为Queue对象在其生存期间可能加入了很多节点,从堆中申请了一些内存空间,这些空间应该随着对象的消亡而释放掉,所以需要在析构函数中来释放这些空间。 问题5: 语句号12345错对错对

33、对编程题样例 一、写一个函数,完成在链表末尾增加一个节点的操作。函数的原型为:Node * AddNode(Node * & head, int newData);其中,链表节点的定义如下:struct Node int data;/存放数据Node * next;/指向链表中的下一个节点;函数参数:函数的第一个参数head指向链表的第一个节点,如果链表为空,则head的值为NULL。第二个参数newData为要插入的新节点中存放的数据。函数返回值:当成功地插入新的节点时,函数返回指向新节点的指针,否则,如果不能申请到内存空间,则返回NULL。Node * AddNode(Node *

34、& head, int newData)/在下面写出函数的实现 答案: Node * AddNode(Node * &head, int newData) /申请新的节点空间 Node * newNode = new Node; if (newNode = NULL) return NULL; /填充新节点的内容 newNode->data = newData; newNode->next = NULL; /插入到链表的结尾 if (head = NULL) head = newNode; else /寻找链表的最后一个节点 Node *tail = head; w

35、hile(tail->next != NULL)tail = tail->next; /将新节点插入到最后 tail->next = newNode; return newNode; 二、写一个函数,找出给定字符串中小写字母字符的个数。函数的原型为: int CalcAlpha(char *str);函数参数: str为所要处理的字符串;函数返回值:所给字符串中小写字母字符的个数int CalcAlpha(char *str)/在下面写上程序的实现 答案: int CalcAlpha(char *str) /判断字符指针是否为空 if(str = NULL) return 0

36、; /记录小写字母字符个数的变量 int num=0; /依次检查各个字符,如果是小写字母,则总数加1 for(int i=0; stri!=0x0; i+) if(stri)>='a' && stri<='z')num+; /返回数字字符个数 return num; 三、定义一个日期类Date,该类对象存放一个日期,可以提供的操作有:int GetYear ();/取年份int GetMonth ();/取月份int GetDay ( );/取日子值void SetDate (int year, int month, int day

37、);/设置日期值下面是测试你所定义的日期类的程序: #include <iostream.h> #include “date.h” voidmain() Date d1(1999, 1, 14);/用所给日期定义一个日期变量Date d2;/定义一个具有缺省值的日期,缺省值为1980年1月1日Date d3(d1);/用已有日期x构造一个新对象d2.SetDate(1999,3,13);cout << "Date:"cout << d1.GetYear() << '.' << d1.GetMonth() << '.'<< d1.GetDay() << endl;cout << "Date:"cout << d2.GetYear() << '.'

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论