西电软院《面向对象程序设计》课程复习(1)
西电2022年秋季《面向对象程序设计(c++)》大作业及答案

学习中心/函授站姓名学号西安电子科技大学网络与继续教育学院2022 学年下学期《面向对象程序设计(C++)》期末考试试题(综合大作业)考试说明:1、大作业试题公布时间:(1)毕业班:2022 年10 月21 日;(2)正常班:2022 年11 月18 日;2、考试必须独立完成,如发现抄袭、雷同均按零分计;3、答案须用《西安电子科技大学网络与继续教育学院2022 秋期末考试答题纸》(个人专属答题纸)手写完成,要求字迹工整、卷面干净、整齐;4、在线上传时间:(1)毕业班学生于2022 年10 月21 日至2022 年11 月1 日在线上传大作业答卷;(2)正常班学生于2022 年11 月18 日至2022 年12 月5 日在线上传大作业答卷;5、拍照要求完整、清晰,一张图片对应一张个人专属答题纸(A4 纸),正确上传。
一、简答题(10 分)1、运算符 new 和 delete 的功能分别是什么?(3 分)答案:运算符new的功能是创建动态对象;delete的功能是释放由new创建的动态对象。
2、若派生类以 private 方式从一个基类派生,派生类的对象可以访问基类中的哪些成员?派生类的成员函数可以访问基类中的哪些成员?(3 分)答案:若派生类以private方式从一个基类派生,派生类的对象不能访问基类中的任何成员(1分);派生类的成员函数可以访问基类中的public和protected成员(2分)。
3、构造函数的作用是什么?在创建派生类的对象时,应按照怎样的顺序调用构造函数?(4 分)答案:构造函数的作用是创建对象并对其进行必要的初始化。
(1分)构造函数调用顺序:基类构造函数、子对象类构造函数(如果有)、派生类构造函数。
(2分)二、填空题(每空 2 分,共 20 分)1、函数的返回值是通过函数体中的return语句带回的;若被调用函数被定义为 void 类型,则被调用函数不带回任何值。
2、表示逻辑关系“ a 大于等于8 或者 a 小于等于5”的C++表达式是。
面向对象程序设计复习要点

《面向对象程序设计》总复习第一部分各章复习要点第1章C++一、基本知识1.面向对象程序设计的基本概念●类、对象、属性、方法2.面向对象程序设计的特点●封装、继承、多态二、基本技能1.VC++6.0编程环境的使用●编辑、编译、运行、查错●调试由多个文件组成的程序2.cin和cout的使用第2章数据类型与表达式1.数据的存储●基本类型:整型、实型、字符型、布尔型●构造类型:结构、联合、枚举2.数据的表示●常量、变量3.符号的表示●运算符、表达式第3章C++控制结构一、基本知识1.语句概述●控制语句●函数语句●表达式语句●空语句2.语句要点●格式、执行过程、注意事项二、基本技能1.递推法程序设计●前项推后项●外加循环控制2.穷举法程序设计●用循环列出所有情况●找出满足条件的情况第4章函数一、基本知识1.函数的概念●函数的声明●函数的定义●函数的调用2.函数●数据传递:主函数→子函数,子函数→主函数3.变量的存储类型●动态●静态●寄存器4.变量的作用域●全局变量●局部变量二、基本技能1.嵌套函数设计●并列定义嵌套调用2.递归函数设计●由未知推向已知的递推公式●格式:If 已知else 递推3.重载函数设计●相同:函数名●不同:函数类型、参数(个数或类型)4.函数技巧●内联函数、外联函数●带默认参数值的函数●引用第5章数组、指针与字符串一、基本知识1.数组的概念●一维数组●二维数组●字符数组2.指针●如何获取各种数据的指针●如何用指针表示各种数据●用指针处理数据的优势二、基本技能1.排序●选择法排序●冒泡法排序2.字符串处理●输入●处理:比较、赋值、连接●输出3.指针●指针的定义●指针的获取●用指针表示数据第6章类和对象一、基本知识1.类2.对象3.构造函数4.析构函数5.拷贝构造函数6.友元7.组合类二、基本技能1.构造类●数据●函数(构造函数、析构函数、拷贝构造函数)2.友元函数●定义与使用3.静态成员●定义与使用4.对象数组5.对象指针第7章继承与派生一、基本知识1.继承2.继承方式3.继承的分类4.继承的二义性5.虚基类6.虚函数与纯虚函数7.抽象类二、基本技能1.构造派生类●构造函数、析构函数、拷贝构造函数2.继承要点●子类的对象如何使用基类的成员●子类的成员如何使用基类的成员第8章多态性一、基本知识1.多态性2.运算符重载二、基本技能1.单目运算符重载●前置运算符重载●后置运算符重载2.双目运算符重载3.运算符重载为友元函数●解决重载的二义性第9章模板一、基本知识1.函数模板2.类模板二、基本技能1.函数模板●定义和使用2.类模板●定义和使用第10章输入输出流一、基本知识1.控制格式2.文件二、基本技能文件编程要点●定义文件对象●打开文件●读写数据●关闭文件第二部分复习要点(一)基本概念1.类(构造函数、析构函数、拷贝构造函数)和对象2.面向对象程序的特点3.重载函数4.友元函数5.虚基类6.虚函数、纯虚函数7.抽象类8.模板函数、模板类9.文件类(二)基本技能1.构造类2.构造派生类(单继承、多继承)3.构造抽象类4.定义重载函数5.定义友元函数6.定义运算符的重载7.定义模板函数8.文件对象的使用第三部分主要问题(一)基本概念1.面向对象程序设计的特点是什么?2.类有哪些成分组成?3.构造函数、析构函数和拷贝构造函数的作用?4.重载函数、友元函数的作用?5.类的继承方式有哪些?对子类的对象有何影响?6.虚基类的作用?7.虚函数、纯虚函数的作用?8.运算符重载的作用?9.模板函数、模板类的作用?10.抽象类的作用?(二)基本技能1.面向对象程序设计的技巧有哪些?2.面向对象程序实现软件复用的方法有哪些?3.面向对象程序设计的多态性体现在哪些方面?。
《面向对象程序设计》复习提纲

作用域与生命期 作用域(五种)、可见性、::运算符的两种用法、支配(覆盖)规则 生命期(三种)、理解静态局部变量、静态全局变量new和delete对堆区操作的基本用法
string类、字符串对象的概念(区分cstring、string.h和string)
scanf、printf)
标准输入输出流类iostream,标准输入流对象cin、标准输出流对象cout、流插入运算符<<、流提取运算符>>的基本概念及用法;输入输 出流中常用控制符的使用(setw、iomanip头文件)
const定义常变量,必须初始化 引用与指针
引用的概念、声明方法(必须初始化、引用常量)、使用方法、传引用 (双向传递)、用const修饰引用(常量引用常量)
C++程序的上机步骤(编辑cpp、编译obj、连接exe、运行)
2、类和对象(5')
面向对象程序设计的三大特点:封装、继承和多态性
理解用class和struct声明类的异同
类中的两种成员,三种访问权限控制符的区别 类的声明和成员函数定义的规范写法
对象的存储结构
this指针的概念及用法
3、关于类和对象的进一步讨论(40')
7、输入输出流(不考)
8、C++工具(不考)
概念、作用、声明及定义方法、调用时机
特点:无名、有参、无返回值
缺省拷贝构造函数、深拷贝与浅拷贝
拷贝赋值操作
概念、作用、声明及定义方法、调用时机(区别于拷贝构造函
数)
特点:有名、有参、有返回值
缺省拷贝赋值操作、深拷贝与浅拷贝
面向对象的程序设计复习资料

⾯向对象的程序设计复习资料⾯向对象复习资料·········⼀、名词解释1、软件⼯程——建⽴在系统化、规范化、数量化等⼯程原则和⽅法上的,关于软件开发各阶段的定义、任务和作⽤的⼯程学科。
包括软件开发技术、软件项⽬管理两⽅⾯内容。
2、模型——对现实的简化,提供系统的蓝图,包含架构[总体]设计和组件[详细]设计;包含重要的因素忽略不相⼲的细节;⼀个系统可以从不同视⾓使⽤不同模型进⾏描述;模型可以是架构的[侧重于组织]、也可以关注⾏为[系统的动作]3、对象——现实世界中具有静态特征和动态特征的某个具体的实际事物。
4、封装——把属性和操作封在⼀个对象⾥,不允许外界直接存取和使⽤。
包含属性与⾏为的结合和信息屏蔽两层含义。
5、消息——向对象发出的[服务]请求,包括服务的对象标识、服务标识、输⼊信息和回答信息等。
定义对象之间单路通信,是从发送⽅到接收⽅的控制流,激发某操作、唤醒信号或导致对象的创建或撤消。
⽤箭头表⽰,符号见表6、继承——派⽣类或⼦类⾃动拥有基类或⽗类的全部属性和操作的类创建⽅法7、多态——同⼀操作作⽤于不同对象,有不同解释或不同的执⾏结果。
两种——编译时、运⾏时;3实现⽅式——接⼝、继承、抽象类。
8、UML——⼀种功能强⼤的、⾯向对象的可视化系统分析的建模语⾔[对⾯向对象系统进⾏可视化、详述、构造和⽂档化的⼯具,已成为软件建模的⼯业标准。
] 9、视图——从某个⽅⾯或⾓度出发描述系统,或表达系统某个⽅⾯特征的⼀个或多个图。
10、动作事物——时间、空间上的动作,模型的动词;最基本的是交互与状态机11、交互——⼀组对象在特定上下⽂、为达到特定⽬的进⾏⼀系列消息交换组成的动作,要列出每个操作的消息、动作次序、连接关系。
12、状态——13、⽤例——14、事件流——15、对象关联——16、可见性——描述属性和操作是否可被其他类引⽤17、活动——对象被占⽤以完成某任务,⽤矩形条表⽰。
2022春西安电子科技大学《面向对象程序设计(C++)》大作业答案

学习中心/函授站_姓名学号西安电子科技大学网络与继续教育学院2022 学年上学期《面向对象程序设计(C++)》期末考试试题(综合大作业)一、简答题(共 10 分)1.(3 分)什么是引用?它与指针有什么区别?答:(任选一个版本,不要两个版本都抄)答案版本1:引用是为已存在的变量取了一个别名,引用和引用的变量共用同一块内存空间。
1) 引用必须被初始化,指针不必。
所以不存在指向空值的引用,但是存在指向空值的指针。
2) 引用初始化以后不能被改变,指针可以改变所指的对象。
答案版本2:引用是某个变量或对象的别名。
(1)引用不是变量,它不占据内存空间,它本身没有内存地址。
引用只是被引用的变量或对象的替身。
(2)引用与指针的区别在于应用不是变量,而指针是变量。
没有引用的引用,却有指针的引用。
2.(3 分)C++提供了哪些循环语句?它们各自的特点是什么?答:C++提供了三种循环语句for、while和do-while。
while循环语句先判断是否满足循环条件,如果满足循环条件,则执行一次循环体,再判断是否执行下一次循环,否则退出循环。
do-while循环语句先执行一次循环体后再判断是继续执行循环体还是退出循环。
for循环先设置循环变量的初值,再判断是执行循环体还是退出循环体。
如果执行了循环体,再改变循环变量值后,判断是执行下一次循环体还是退出循环,依此类推。
3.(4 分)构造函数的作用是什么?在创建派生类的对象时,应按照怎样的顺序调用构造函数?答:构造函数的作用是创建对象并对其进行必要的初始化。
构造函数调用顺序:基类构造函数、子对象类构造函数(如果有)、派生类构造函数。
二、填空题(每空 2 分,共 20 分)1.C++程序中的数据可以分为两大类,;2.C++x = 5,y = 0,z = 3,则表达式 !x || y++ && z 执行表达式后y的值4.下列程序在构造函数和析构函数中申请和释放类的私有成员,请完成该类的实现。
面向对象程序设计 复习资料

1.对象(1)从概念层面讲,对象是某种拥有责任的抽象。
(2)从规格层面讲,对象是一系列可以被其他对象使用的公共接口。
(3)从语言实现层面讲,对象封装了代码和数据。
2.软件开发中的经典阶段:需求、分析、设计、规范、实现、测试、部署、维护。
3.设计7原则:开闭原则、里氏代换原则、依赖倒转原则、合成/聚合复用原则、迪M特原则、接口隔离原则、单一职责原则。
4.面向对象的方法学:UML(统一建模语言)、RUP(统一软件开发过程)、XP(极限编程)。
开发方法:Booch、Coad、OMT、UML、OOSE、Wirfs—Brock 5.OOA——运用面向对象方法进行需求分析。
OOD——运用面向对象方法进行系统设计。
OOP——运用面向对象方法进行程序设计。
6.OOA的基本任务:是运用面向对象的方法,对问题域和系统责任进行分析和理解,对其中的事物和它们之间的关系产生正确的认识,找出描述问题域及系统责任所需的类及对象,定义这些类和对象的属性和操作,以及它们之间所形成的结构、静态联系和动态联系。
最终目的:是产生一个符合用户需求,并能够直接反映问题域和系统责任的OOA模型及其详细说明。
优点:(1)加强了对问题域和系统责任的理解。
(2)改进与分析有关的各类人员之间的交流。
(3)对需求的变化具有较强的适应性。
(4)支持软件复用。
OOA的三大策略是:属性策略、方法策略、对象策略。
7.(1)封装:是指对象在其操作中隐藏属性。
它是一种信息隐蔽技术,用户只能看见对象封装界面上的信息,对象的内部实现对用户是隐蔽的。
封装的目的是使对象的使用者和生产者分开,使对象的定义和实现分开。
例如:要从同事那里借钱,在商店购买食物,就不会抢夺同事的钱包,大翻一通,看看里面是否有足够的钱。
而应该询问他们是否可以借你一些钱,他们就会自己翻钱包。
以表示圆的一个对象作为封装的例子。
圆的操作应能计算出半径、直径、周长和面积。
假定选择存储直径,要访问直径的程序员都会选择存储直径属性,而不是通过“获取直径”的操作来访问。
面向对象程序设计复习提要(不重要)

char ID[10]; char Name[10] ……
student
char ID[10]; char Name[10] float score; …
void display()
{ person::display(); cout<<score<<endl;}
继承的一个作用就是 代码重用,即从基类 派生子类,子类无需 修改基类的代码,就 可以直接拥有基类的 成员,然后增加少量 代码就可以实现特殊 功能,这就实现了代 码的重用;另一个作 用是扩充系统,即许 派生类在继承父类共 性的基础上,增加新 的属性和操作来实现 特殊功能。
学生类 属性: 学号; 姓名; 专业; 操作: 查询属性get(); 修改属性modify(); 打印属性print();
二、复习要点
第2章 C++语言基础
1. C++程序的一般结构 一个C++程序一般可以分成四 个部分:预处理指令、全局说 明(包括对象类的定义)、程 序的主函数和用户自定义的子 函数,如右图所示。一个C++ 程序由一个或多个源代码文件 构成。C++的源代码文件分为 两类:头文件(.h)和源程序文 件(.cpp)。
4.2.1 派生类的定义
class <派生类名>: <继承方式> <基类名> { <派生类新定义成员> }; <继承方式>有三种: 公有继承(public); 私有继承(private); 保护继承(protected) ; 缺省情况下为私有继承。
面向对象程序设计复习资料(可编辑修改word版)

面向对象程序设计复习资料(可编辑修改word版)面向对象程序设计期末总复习题一、单项选择题1.下面关于对象概念的描述中,是错误的。
(B)A.对象代表着正在创建的系统中的一个实体B.对象就是C 语言中的结构体变量C.对象是一个状态和操作(或方法)的封装体D.对象之间的信息传递是通过消息进行的2.继承机制的作用是:(C)A.信息隐藏B.数据封装C.定义新类D.数据抽象3.有关析构函数的说法不正确的是(D)A.析构函数有且只有一个B.析构函数无任何函数类型C.析构函数没有形参D.析构函数不能是虚函数4.友元的作用之一是(A)A.提高程序的运行效率B.加强类的封装性C.实现数据的隐藏性D.增加成员函数的种类5.通常拷贝构造函数的参数是。
(C)A.某个对象名B.某个对象的成员名C.某个对象的引用名D.某个对象的指针名6.如果在基类中将show 声明为不带返回值的纯虚函数,正确的写法是。
(C)A.irtual show()=0;B.virtual void show();C.virtual void show()=0;D.void show=0 virtual;7.下面关于友元的描述中,错误的是。
(D)A.友元函数可以访问该类的私有数据成员B.一个类的友元类中的成员函数都是这个类的友元函数C.友元可以提高程序的运行效率D.类与类之间的友元关系可以继承8.在C++中,运算符不能重载。
(B)A. +B.?:C.-D.<=9.下列关于运算符重载的描述中,是正确的。
(D)A.运算符重载可以改变操作数的个数B.运算符重载可以改变优先级C.运算符重载可以改变结合性D.运算符重载不可以改变语法结构10.在下列函数原型中,可以作为类AA 构造函数的是(D)A.void AA(int) ; B.int AA( ) ; C.AA(int)const; D.AA(int);11.在声明类时,下面的说法正确的是。
(C)A.可以在类的声明中给数据成员赋初值B.数据成员的数据类型可以是 registerC.private,public,protected 可以按任意顺序出现D.没有用private,public,protected 定义的数据成员是公有成员12.继承具有,即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
13
3 类的基本问题
试完成类Sub1和Sub2的定义和操作的实现代码,使之能符合 下面程序及在注释中描述的运行结果的要求: main() { Sub1 s1(1000, "This is an object of Sub1"); Sub2 s2(2000, 10); s1.printOn(); // 此时显示出: <1000: This is an object of Sub1> s2.printOn(); // 此时显示出: <10 and 2000> }
6
1 函数的基本问题
int main(int argc, char *argv[]) { if( argc <= 1 ) { cout << "Must has 1 arguments!" << endl; return 1; } printf("atoi(\"%s\")=%d\n", argv[1], atoi(argv[1])); return 0; }
10
3 类的基本问题
2. According to the interface of a Date class, implement the Date class. class Date { //… public: Date(int y=1970, int m=1, int d=1); //构造器 boolean isLeapYear(const Date& d); //判断对象d的年属性是否是闰年 void print(); //打印日期对象的数据成员值 };
《C++面向对象程序设计》 课程复习
西安电子科技大学软件工程研究所
李雁妮
Email: yannili@
1 函数的基本问题
1. 对下面的函数findChar,改正你所发现的错误,并写出另一个 函数find2Char,使之改用指针方式来访问cpString的元素,且 功能与改正后的函数findChar等价。
void findChar(const char cpString[], const char cChar) { for (int i = 0; cpString*i+ != ‘\0‘; i++) if (cpString[i] = cChar) { printf("The index is %d.\n", i); return; } printf("In the string \"%s\" having %d char‘s, no ‘%c‘ has been found.\n" , cpString, i, cChar); }
14
3 类的基本问题
class Sub1 : public Base { char* cpString; public: void : %s>\n", iBody, cpString); } Sub1(int i, char* s) : Base(i) { cpString = new char[strlen(s)+1]; strcpy(cpString, s); } }; class Sub2 : public Base { short sShort; public: void printOn(){ printf("<%d and %d>\n", sShort, iBody); } Sub2(int i, short s) : Base(i),sShort(s) {} };
5
1 函数的基本问题
#include <cstdio> #include <iostream> using namespace std; int atoi(const char* str){ int result = 0, len = strlen(str); int sign =1; if( str[0] == '-' ) { str++; sign = -1; len--; } else if( str*0+ == ‘+’) , str++; sign = 1; len--;} for(int i=0; i<len; i++){ result = result * 10 + str[i] - '0' ; } return sign * result; }
15
3 类的基本问题
In a company, there are two types of people: employee and manager. Notice that a manager is also an employee. Every employee has following basic information: name,age,workYear( 工作年限) and depNo(部门号).Moreover, a manager has other some attributes: level(级别) and a array of employees managed. A object of class Employee or Manager has following behaviors: //…. Please base on the above objects behaviors to define and implement class Employee and Manager respectively.
9
3 类的基本问题
class Stack{ public: enum { MaxStack = 5 }; void Stack() { top = -1; } void push(const int& t){ if ( full() ) { return ; } arr[++top] = t; } int pop( ){ if ( empty() ) { return dummy_val; } return arr[top--]; } bool empty() { return top < 0 ;} bool full() { return top >= MaxStack - 1; } int getNumbers() { return top + 1; } private: int top, int arr[ MaxStack ]; int dummy_val; };
12
3 类的基本问题
已知类的定义如下: class Base { protected: int iBody; public: virtual void printOn() = 0; Base(int i = 0) : iBody(i) {} }; class Sub1 : public Base { // … public: void printOn(); Sub1(int i, char* s); }; class Sub2 : public Base { // … public: void printOn(); Sub2(int i, short s); };
4
1 函数的基本问题
3. (1) Implement a function: int atoi (const char* str); which converts a string str (in decimal format) to its corresponding integer and return the integer. (2) Write a test program which take an integral string from command-line argument, and print the calling result of atoi().
7
2 Namespace基本问题
namespace a { void f(); int g(double x); }
namespace b { int f(); double y; }
using namespace a; using a::f();
8
3 类的基本问题
1. Implement a class Stack , where a stack is a Last In, First Out list of zero or more elements. The Stack class should provide following methods: (1) void push( const int& t); // insert an element to a stack (2) int pop(); // delete an element from a stack and return it (3) bool empty(); // check a stack is empty or not (4) bool full(); // check a stack is full or not (5) int getNumbers(); // return the current number of elements in a stack
3
1 函数的基本问题
2. 阅读下面的程序,写出main的输出。 int h(int iCount, const int* ipIndex, int& irObj) { iCount %= 2; if (*ipIndex >= 5) irObj += iCount; return *ipIndex + irObj; } main() { int i, j = 1, k = 2, m; for (i = 0; i < 10; i++, j++) { m = h(i, &j, k); printf("i = %2d, j = %2d, k = %2d, m = %2d.\n", i, j, k, m); } }