面向对象程序设计 复习资料
《面向对象程序的设计》复习资料全
《面向对象程序设计》课程期末复习资料《面向对象程序设计》课程讲稿章节目录:第一章、C++基础(16个知识点)01 计算机求解问题的过程02 编程的步骤03 程序设计方法04 程序设计基本概念05 C++程序集成开发环境简介06 C++程序实例07 C++源程序的组成08 C++源程序的组成元素09 C++与C的主要差异–符号常量和标准输入输出流10 C++与C的主要差异–内联函数11 C++与C的主要差异–带默认形参值的函数12 C++与C的主要差异–函数重载13 C++与C的主要差异–动态内存分配和释放14 C++与C的主要差异–动态内存分配和释放程序实例15 C++与C的主要差异–引用和返回引用的函数16 C++与C的主要差异–函数的引用调用第二章、面向对象方法(27个知识点)01 面向对象方法基本概念–对象、类、实例和消息02 面向对象方法基本概念–封装、继承和多态03 类的定义04 构造函数05 对象的定义和访问06 对象的定义和访问程序实例07 类成员的访问控制08 类成员的访问控制程序实例09 析构函数11 类声明和类实现的分离12 类的常量成员13 类的静态数据成员14 类的静态成员函数15 this指针16 类的友元17 类的对象成员–基本概念18 类的对象成员–对象成员的声明、初始化和访问19 自定义类的运算符重载概述20 类成员函数形式的运算符重载21 类友元形式的运算符重载22 赋值运算符和下标运算符重载程序实例23 类设计实例24 面向对象方法程序实例–类和对象的基本定义、构造函数和析构函数25 面向对象方法程序实例–静态成员和多文件结构26 面向对象方法程序实例–友元和运算符重载27 面向对象方法程序实例–对象成员第三章、继承与多态(17个知识点)01 继承概述02 派生类定义03 派生类构造函数和析构函数04 派生类构造函数和析构函数程序实例05 函数重定义和派生类的继承方式06 多重继承下的派生类定义07 多重继承中的二义性问题08 虚拟继承和虚基类09 类型兼容10 多态性的概念和实现原理11 虚函数13 纯虚函数和抽象类14 继承与多态程序实例–派生类定义和函数重定义15 继承与多态程序实例–多重继承16 继承与多态程序实例–虚拟继承和虚函数17 继承与多态程序实例–抽象类和纯虚函数第四章、输入输出流(16个知识点)01 输入输出流概述02 输入输出流对象03 输入输出流的插入和提取运算符04 输入输出流的插入和提取运算符程序实例05 输入输出流的put函数06 输入输出流的get函数07 输入输出流的getline函数08 输入输出流的write函数09 输入输出流的read函数10 输入输出流的write、read函数程序实例11 文件随机读写概述和相关函数12 文件随机读写程序实例13 自定义类型数据的标准输入输出和文本文件输入输出14 自定义类型数据的二进制文件输入输出15 输入输出流程序实例–输入输出流操作16 输入输出流程序实例–插入运算符和提取运算符重载第五章、模板(7个知识点)01 函数模板的定义和使用02 函数模板程序实例03 类模板的定义04 类模板的使用05 类模板的静态成员06 模板程序实例–函数模板07 模板程序实例–类模板一、客观部分:(单项选择、多项选择、不定项选择、判断)(一)、选择部分1、面向对象方法的基本观点是一切系统都是由( C )构成的。
面向对象程序设计考试复习资料
面向对象程序设计1. 代码public class Test {public int aMethod() {static int i = 0;i++;return i;}public static void main (String args[]) {Test test = new Test();test.aMethod();int j = test.aMethod();System.out.println(j);}}输出结果为编译失败,static用来修饰全局变量,不能修饰局部变量2. 下面的程序中,temp的最终值是1long temp=(int)3.9;temp%=2;3.在J2EE中属于Web层的组件有:Servlet4. 派生类中的成员不能直接访问基类中的private成员。
5.以public修饰的类如:public class Car{…}则Car可被其它程序包中的类使用6.paint( )方法使用 Graphics 类型的参数7. 下面数据插入语言(DIL)不属于SQL语句的子类8. 实现运行时的多态性要使用虚函数。
9. 创建对象时构造函数被调用10. 如下代码:class Base {Base() { System.out.print(“Base”); }}public class Alpha extends Base {public static void main( String[] args ) {new Alpha();-----调用父类无参的构造方法new Base();}}结果是BaseBase。
11.如果希望控件在界面上按表格行分列排列,应使用GridLayout布局管理器12. 声明抽象方法不可写出大括号叙述正确13. 线程交互中不提倡使用stop()方法14.当检索一个压缩文件时,首先要建立压缩文件输入流对象,该对象以 FileInputStream 对象为参数15.jsp指令中isELIgnored="boolean"的意思是决定是否支持EL表示。
面向对象程序设计(Java)总复习
需要频繁地创建和销毁同一对象实例的场合,如日志 记录器、缓存对象等。
工厂模式
定义
提供一个创建对象的最佳方 式。
实现方式
简单工厂、工厂方法、抽象 工厂。
应用场景
当需要根据不同的参数条件 创建不同的对象时,如数据 库连接池、对象序列化等。
观察者模式
定义
定义了对象之间的依赖关系,使得当一个对象状态发生改变时,其 相关依赖对象能够得到通知并自动更新。
for语句
用于循环遍历数组或集合等数据结 构。
04
函数与方法
函数
函数是执行特定任务的代码块,可以接受输入参数并返回结果。在 Java中,函数也被称为方法。
方法重载
在同一类中可以定义多个同名方法,只要它们的参数列表不同即可。
方法覆盖
子类可以定义与父类同名的方法,只要它们的参数列表和返回类型相 同即可。
集合框架
集合框架概述
List接口及其实现
Java集合框架提供了用于存储和操作对象 集合的接口和类。它包括List、Set、 Queue和Map等接口以及实现这些接口的 类。
Set接口及其实现
List接口表示有序集合,可以包含重复元素 。Java提供了ArrayList、LinkedList等类来 实现List接口。
String类与正则表达式
字符串的比较
字符串的替换
字符串的截取
01
03 02
String类与正则表达式
01
正则表达式
02
正则表达式的概念
03
正则表达式的使用方法
String类与正则表达式
正则表达式的匹配规则
正则表达式的特殊字符
IO流与文件操作
何冰-面向对象程序设计-复习题(带部分复习资料)
、单项选择题1引入内联函数的主要目的是A)缩短程序代码,少占用内存空间B.既可以保证程序的可读性,又能提高程序的运行效率C)提高程序的执行速度D)使程序的结构比较清晰2重载函数是A)以函数参数来区分,而不用函数的返回值来区分不同的函数B.以函数的返回值来区分,而不用函数参数来区分不同的函数C)参数表完全相同而返回值类型不同的两个或多个同名函数D)参数表和返回值类型都必须是不同的两个或多个同名函数3有函数原型void fun2 (int *), 下面选项中,正确的调用是A)double x = 2.17; fun2 (&x); C) int a = 15; fun2 (a*3.14);B) int b = 100; fun2 (& b); D) fun2 (256);4在C++中,要实现动态联编,必须使用()调用虚函数。
A)类名B)派生类指针C)对象名D)基类指针5在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是A)派生类的对象可以直接访问基类中的所有成员B)派生类的对象可以初始化基类的引用C)派生类的对象可以赋给基类的对象D)派生类的对象的地址可以赋给指向基类的指针6设置虚基类的目的是A)消除两义性B)简化程序C)提高运行效率D)减少目标代码7关于构造函数,以下说法错误的是A)构造函数的作用是在对象被创建时使用特定的值构造对象,或者说将对象初始化为一个特定的状态。
在对象创建时由系统自动调用。
B)基类的构造函数可以被派生类所继承。
C)如果程序中未声明,则系统自动产生出一个缺省形式的构造函数。
D)允许为内联函数、重载函数、带缺省形参值的函数。
8下列关于C++函数的说明中,正确的是A)内联函数就是定义在另一个函数体内部的函数B)函数体的最后一条语句必须是return语句C)标准C++要求在调用一个函数之前,必须先声明其原型D)编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式9由于常对象不能被更新,因此A) 通过常对象只能调用它的常成员函数B) 通过常对象只能调用静态成员函数C) 常对象的成员都是常成员D) 通过常对象可以调用任何不改变对象值的成员函数10下列关于虚函数的说明中,正确的是A)从虚基类继承的函数都是虚函数B)虚函数不得是静态成员函数C)只能通过指针或引用调用虚函数D)抽象类中的成员函数都是虚函数11运算符重载是对已有的运算符赋予多重含义,因此A) 可以对基本类型(如int类型)的数据,重新定义“ + 运算符的含义B) 可以改变一个已有运算符的优先级和操作数个数C) 只能重载C++中已经有的运算符,不能定义新运算符D) C++中已经有的所有运算符都可以重载12模板对类型的参数化提供了很好的支持,因此A) 类模板的主要作用是生成抽象类B) 类模板实例化时,编译器将根据给出的模板实参生成一个类C) 在类模板中的数据成员都具有同样类型D) 类模板中的成员函数都没有返回值13下列符号中可以用作C++标识符的是A)_radius B)foo~bar C)else D)3room 14下列语句中,错误的是A)c onst int buffer=256; B)c onst int temp;C)const double *po int; D)const double *rt =new double(5.5);15有如下程序:int x=3;do{x -= 2;cout«x;}while(!(--x));执行这个程序的输出结果是A) 1 B) 3 0C) l-2 D)死循环16有如下程序:#in clude <iostream>using n amespace std;int mai n(){int *p;*p = 9;cout<<"The value at p:"«*p; return 0;}编译运行程序将出现的情况是A) 够编译时出现语法错误,不能生成可执行文件B) 运行时一定输出:The value at p: 9C) 运行时一定输出:The value at p: *9D) 运行时有可能出错17有如下程序:#i nclude <iostream>using n amespace std;int mai n(){void fun cti on( double val);double val;function( val);cout«val;return 0;}void fun cti on( double val){val = 3;}编译运行这个程序将出现的情况是A)编译出错,无法运行B)输出:3C)输出:3.0 D)输出一个不确定的数18有如下类定义:class AA{int a;public:int getRef() const{return &a;} // ①int getValue() con st{return a;} // ②void set(i nt n) con st{a=n;} // ③frie nd void show(AA aa) const {cout<<aa; } // ④ }; 其中的四个函数定义中正确的是A)①B)②C)③D)④19有如下程序:#in clude <iostream>using n amespace stdclass Base{public:void fun() {cout<v"Base::fu n"v<e ndl;};class Derived:public Base{public:void fun(){cout<<"Derived::f un"«en dl;}};int mai n(){Derived d;d.fu n();return 0;}已知其执行后的输出结果为:Base::fu nDerived::fu n则程序中下划线处应填入的语句是A) Base.fu n(); B)Base::fu n() C)Base->fu n() D)fu n(); 20下面是重载为非成员函数的运算符函数原型,其中错误的是A) Fracti on operator + (Fracti on, Fract ion);B) Fractio n operator - (Fracti on);C) Fract ion& operator = (Fracti on&, Fract ion);D) Fract ion& operator += (Fract ion&, Fract ion);21有如下类定义:class Foo{public:Foo(int v):value(v){} // ①~Foo(){} // ②private:Foo(){} // ③in t value = 0; 〃④};其中存在语法错误的行是A)①B)②C)③D)④22有如下类定义:class Point{int x_, y_;public:Poi nt():x_(0), y_(0){}Poi nt(i nt x, i nt y = 0):x_(x),y_(y){}};若执行语句Point a(2), b[3], *c[4];则Point类的构造函数被调用的次数是A)2次B)3次C)4次D)5次23有如下程序:#i nclude <iostream>using n amespace std;class A{public:A(){cout«"A";}~A(){cout«"~A";}};class B:public A{A* p;public:B(){cout<<"B"; p = new A();} ~B(){cout<<"~B"; delete p;} };int mai n(){B obj; return 0;}执行这个程序的输出结果是A)BAA~A~B~A B)ABA~B~A~AC)BAA~B~A~A D)ABA~A~B~A24有如下程序:#i nclude <iostream>using n amespace std;class Base{private:void fun 1() con st{cout«"fu nl";}protected:void fun 2() con st{cout<<"fu n2";} public:void fun 3() con st{cout<<"fu n3";}};class Derived:protected Base{public:void fun4() con st{cout<<"fu n4";}};int mai n(){Derived obj;obj.fu nl (); // ①obj.fu n2(); // ②obj.fu n3(); // ③obj.fu n4(); // ④return 0;}其中有语法错误的语句是A)①②③④B)①②③C)②③④D)①④ 25有如下程序:#i nclude <iostream>using n amespace std;class Base{public:void fun l(){cout«"Base "<<e ndl;}virtual void fun 2(){cout<<"Base"<<e ndl; } };class Derived:public Base{public:void fun l(){cout<v"Derived"v<e ndl;}void fun 2(){cout<<"Derived"<<e ndl;}};void f(Base & b){b.fu nl();b.fu n2();}int mai n(){Derived obj;f(obj);return 0;}执行这个程序的输出结果是A)Base B)BaseC)Derived D)DerivedBasQerived Base Derived26有如下类声明:class SAMPLE{int n;public:SAMPLE (int i = 0): n (i){}void setValue(i nt nO);};下列关于setValue成员函数的实现中,正确的是A) SAMPLE::setValue(i nt n 0){n = n0;}B) void SAMPLE::setValue(i nt n 0){n = n0;}C) void setValue(i nt n 0){n = n0;}D) setValue(i nt n 0){n = n0;}27 •下列函数模板的定义中,合法的是( )。
面向对象程序设计期末复习题资料
面向对象程序设计期末复习题一、单项选择题1.对于类中定义的成员,其隐含访问权限为【 B 】A) public B) private C) static D)protected2.关于类和对象不正确的说法是【 B 】A) 类是一种类型,它封装了数据和操作 B) 一个类的对象只有一个C) 对象是类的实例D) 一个对象必属于某个类3.下面关于对象概念的描述中,【 C 】是错误的。
A)对象代表着正在创建的系统中的一个实体B)对象就是C语言中的结构体变量C)对象是一个状态和操作(或方法)的封装体D)对象之间的信息传递是通过消息进行的4. 使用派生类的主要原因是【 A 】。
A)提高代码的可重用性B)提高程序的运行效率C)加强类的封装性D)实现数据的隐藏5. 有关析构函数的说法不正确的是【D 】A)析构函数有且只有一个B)析构函数无任何函数类型C)析构函数没有形参D)析构函数的作用是在对象被撤消时收回先前分配的内存空间6. 声明一个类的对象时,系统自动调用一个函数;撤消对象时,系统自动调用一个函数;该函数为【 C 】A) 成员函数;构造函数B) 复制构造函数;析构函数C) 构造函数;析构函数D) 析构函数;复制构造函数7. 下列关于运算符重载的描述中,【 D 】是正确的。
A)运算符重载可以改变操作数的个数B)运算符重载可以改变优先级C)运算符重载可以改变结合性D)运算符重载不可以改变语法结构8. 能用友元函数重载的运算符是【 A】。
A)+ B)= C)[] D)->9.当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的【 A 】A) private成员B) protected成员C) public成员D) 友元10.在C++中,要实现动态联编,必须使用【D】调用虚函数A) 类名B) 派生类指针C) 对象名D) 基类指针11.若一个类中含有纯虚函数,则该类称为【 A 】A) 抽象类B) 纯基类C) 派生类D) 基类12.当使用ifstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式【 B 】A) ios:: out B) ios:: inC) ios::in|ios::out D) ios::binary13.通常拷贝构造函数的参数是【 C 】。
面向对象程序设计 复习资料
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)封装:是指对象在其操作中隐藏属性。
它是一种信息隐蔽技术,用户只能看见对象封装界面上的信息,对象的内部实现对用户是隐蔽的。
封装的目的是使对象的使用者和生产者分开,使对象的定义和实现分开。
例如:要从同事那里借钱,在商店购买食物,就不会抢夺同事的钱包,大翻一通,看看里面是否有足够的钱。
而应该询问他们是否可以借你一些钱,他们就会自己翻钱包。
以表示圆的一个对象作为封装的例子。
圆的操作应能计算出半径、直径、周长和面积。
假定选择存储直径,要访问直径的程序员都会选择存储直径属性,而不是通过“获取直径”的操作来访问。
面向对象程序设计 复习资料2
面向对象程序设计复习资料(一)单项选择题1.Java是一门()语言。
A. 机器B. 汇编C. 面向过程的高级D. 面向对象的高级2. 具有相同属性和服务的一组对象的共同模板称为()。
A. 程序B. 类C. 代码D. 概念3.在Java程序中包含主方法的类被称为主类,主方法的访问控制修饰符为()。
A. privateB. protectedC. publicD. static4.Java语言中的switch语句属于()语句。
A. 数据输入B. 数据输出C. 分支处理D. 循环控制5.在类的定义中,实现接口的子句所使用的关键字为()。
A. extendsB. implementsC. publicD. abstract6.在派生类的定义中,继承父类的子句所使用的关键字为()。
A. extendsB. implementsC. publicD. abstract7.下列能表示栈(stack)s1长度的是( )。
A.s1.length()B.s1.lengthC.s1.sizeD.s1.size()8.下面的异常()为文件没有找到异常。
A. NullPointerExceptionB. FileNotFoundExceptionC. ArrayIndexOutOfBoundsExceptionD. IOException9.下列不是InputStream 类的子类的是()。
A. FileInputStreamB. ObjectInputStreamC、 FileOutputStream D. DataInputStream10.进行文件输入输出操作时,最常用的系统包是()。
A. B. java.ioC. java.utilD. java.awt11.类是对具有共同属性和行为的对象的抽象描述,每个对象称为该类的一个()。
A. 产品B. 元素C. 成分D. 实例12.使用JDK运行Java程序时使用的命令是()。
面向对象程序设计课程复习资料
《面向对象程序设计》课程复习资料一、单项选择题:1.C#中每个 int 类型的变量占用()个字节的内存。
[ ]A.1B.2C.4D.82.C#应用程序中,用主方法指明程序执行的开始点,主方法的名字规定为 [ ]A. classB. mainC. MainD. MainWay3.下面所列的C#自定义标识符中,正确的是 [ ]A.@double B. $double C. #double D. ~double4.C#语言是微软.NET公共语言运行环境中内置的核心程序设计语言,是一种 [ ]A.面向过程程序设计语言B.面向对象程序设计语言C.跨平台程序设计语言D.机器语言5.C#语言中,双精度实型数据类型(double)所占用的存储空间为()个字节。
[ ]A.1B.2C.4D.86.C#应用程序中,导入其他系统预定义元素部分可以使用关键字 [ ]A. useB. namespaceC. importD. using7.下面的运算符中,优先级别最低的是 [ ]A. newB. !=C. ?:D. =8.设有整型变量x,则表达式x=5/8运算后,变量x的值为 [ ]A.0B.0.625C.0.6D.0.639.执行C#语句序列:int i; for (i = 0; i++ < 4; );后,变量i的值是 [ ]A.5B.4C.1D.010.在默认的情况下,省略的类访问修饰符是 [ ]A. privateB. publicC. protectedD. internal11.在下面的类声明中,属于私有字段的是 [ ]class Person{public string name;public string sex;private int age;double weight;}A. name sexB. ageC. weightD. age weight12.下面所列选项中,能够正确定义2行3列二维整型数组a的是 [ ]A. int [][] a = new int [2][3]B. int [ ,] a = new int [2,3]C. int [2][3]D. int [ ,] a = int [2,3]13.下面所列选项中,不能正确定义并初始化二维数组a的是 [ ]A. int [ ,] a = new int [2,3]{{1,2,3},{4,5,6}}B. int [ ,] a = new int [,]{{1,2,3},{4,5,6}}C. int [ ,] a = new int [2,3]{1,2,3,4,5,6}D. int [ ,] a = {{1,2,3},{4,5,6}}14.在C#中,下列()语句能创建一个具有 3 个初始值为""的元素的字符串数组。
面向对象程序设计复习资料
面向对象程序设计复习资料第2章面向对象思维建立面向对象程序设计的特征:①模块化;②抽象化;③封装;④可组合;⑤继承;⑥软件持续使用时间更长。
面向对象思维分为两步:一是需求分析,识别出有哪些对象,它们分别做什么事(who&&what );二是如何利用对象协作完成一件完整的事情(howb•类与对象的概念和关系:1)类是面向对象程序设计方法的核心,利用类可以实现对数据的封装和隐蔽。
在面向对象程序设计中,程序模块是由类构成。
类是对逻辑相关的函数与数据的封装,它是对问题的抽象描述。
C++的语法提供了对自定义类型的支持,这就是类。
正如基本数据类型中隐含的数据和操作,因此在定义一个类时也要说明数据和操作。
2)类实际上是一种抽象机制,它描述了一类为问题的属性和行为,即类描述了一类对象的数据存储和操作特征。
每一个怪物都有一些共同的静态特征,这些共同的特征抽象到类中统称为该类的属性,属性通过声明普通变量来实现。
每一个怪物都有一些共同的动态行为,这些共同的行为抽象到类中统称为该类的操作, 操作通过声明普通变量来实现。
还能调用对象中的函数(构造函数和析构函数除外)・对象间的协作实现如果函数在类外实现,那么必须在函数名前加上类名,否那么不能实现“::"是作用域限定符,用来声明函数属于哪一类;类必须先在类中做原型声明,然后才能在类外实现;system(”psudr”):等待用户按键然后返回,按任意键继续;system(”cls”):清屏操作关键字new :①在堆上获得一块内存空间、②调用构造函数、③返回正确的指针栈(堆栈)是限定仅在表尾进行插入和删除操作的线性表。
单独存放数据的那块内存称为“堆”,存储指针那块内存称为“栈”User *Lucy = new User():声明一个指针对象Lucy ,在名称堆区保存Lucy这个对象的所有信息,在栈中保存Lucy的堆地址。
delete对象名;|销毁之前引用的对象第6章深入学习面对对象函数成员函数:属于一个类的函数;用于完成对象的初始化类函数:类的成员函数,属于一个类的成员,出现在类体中。
面向对象程序设计复习资料
27.下列关于this指针的叙述中,正确的是___D_____D.类的非静态成员函数才有this指针30.设置虚基类的目的是___A_____A.消除二义性B.简化代码C.提高运行效率D.减少目标代码36.在C++类语言体系中,不能被派生类继承的有_______BA.转换函数B.构造函数C.虚函数D.静态成员函数38.下列关于虚基类的描述中A.设置虚基类的目的是为了消除二义性;C.若同一层包含多个虚基类,这些基类的构造函数按照它们的次序调用;D.若虚基类由非基类派生而来,则仍然先调用基类构造函数,再用派生类的构造函数;41.在重载一个运算符时,如果其参数表中有一个参数,则说明该运算符是( )。
D A.一元成员运算符 B.二元成员运算符 C.一元友元运算符 D.选项B和选项C都可能43.下面关于虚函数的描述,错误的是( )。
BA.在成员函数声明的前面加上virtual修饰,就可把该函数声明为虚函数B.基类中说明了虚函数后,派生类中对应的函数也必须说明为虚函数C.虚函数可以是另一个类的友元函数,但不能是静态成员函数D.基类中说明的纯虚函数在其任何派生类中都必须实现47下面正确的是,在父类中的访问属性访问修饰符在子类中的访问属性()CA)public,private不能直接访问 B)protect,public,publicC)private,public不能直接访问 D)protect,private,protect48类A是类B的友元,类B是类C的友元,则下列说法正确的是DA)类B是类A的友元B)类C是类A的友元C)类A是类C的友元D)以上都不对51.下列说法正确的是BA)内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方B)内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方C)类的内联函数必须在类体内定义D)类的内联函数必须在类体外通过加关键字inline定义52.下面对静态数据成员的描述中,正确的是DA)静态数据成员可以在类体内进行初始化B)静态数据成员不可以被类的对象调用C)静态数据成员不能受private控制符的作用D)静态数据成员可以直接用类名调用二、知识点1.实现运行时的多态性要使用虚函数。
《面向对象程序设计》复习资料
《面向对象程序设计》课程期末复习资料《面向对象程序设计》课程讲稿章节目录:第一章、C++基础(16个知识点)01 计算机求解问题的过程02 编程的步骤03 程序设计方法04 程序设计基本概念05 C++程序集成开发环境简介06 C++程序实例07 C++源程序的组成08 C++源程序的组成元素09 C++与C的主要差异–符号常量和标准输入输出流10 C++与C的主要差异–内联函数11 C++与C的主要差异–带默认形参值的函数12 C++与C的主要差异–函数重载13 C++与C的主要差异–动态内存分配和释放14 C++与C的主要差异–动态内存分配和释放程序实例15 C++与C的主要差异–引用和返回引用的函数16 C++与C的主要差异–函数的引用调用第二章、面向对象方法(27个知识点)01 面向对象方法基本概念–对象、类、实例和消息02 面向对象方法基本概念–封装、继承和多态03 类的定义04 构造函数05 对象的定义和访问06 对象的定义和访问程序实例07 类成员的访问控制08 类成员的访问控制程序实例09 析构函数11 类声明和类实现的分离12 类的常量成员13 类的静态数据成员14 类的静态成员函数15 this指针16 类的友元17 类的对象成员–基本概念18 类的对象成员–对象成员的声明、初始化和访问19 自定义类的运算符重载概述20 类成员函数形式的运算符重载21 类友元形式的运算符重载22 赋值运算符和下标运算符重载程序实例23 类设计实例24 面向对象方法程序实例–类和对象的基本定义、构造函数和析构函数25 面向对象方法程序实例–静态成员和多文件结构26 面向对象方法程序实例–友元和运算符重载27 面向对象方法程序实例–对象成员第三章、继承与多态(17个知识点)01 继承概述02 派生类定义03 派生类构造函数和析构函数04 派生类构造函数和析构函数程序实例05 函数重定义和派生类的继承方式06 多重继承下的派生类定义07 多重继承中的二义性问题08 虚拟继承和虚基类09 类型兼容10 多态性的概念和实现原理11 虚函数13 纯虚函数和抽象类14 继承与多态程序实例–派生类定义和函数重定义15 继承与多态程序实例–多重继承16 继承与多态程序实例–虚拟继承和虚函数17 继承与多态程序实例–抽象类和纯虚函数第四章、输入输出流(16个知识点)01 输入输出流概述02 输入输出流对象03 输入输出流的插入和提取运算符04 输入输出流的插入和提取运算符程序实例05 输入输出流的put函数06 输入输出流的get函数07 输入输出流的getline函数08 输入输出流的write函数09 输入输出流的read函数10 输入输出流的write、read函数程序实例11 文件随机读写概述和相关函数12 文件随机读写程序实例13 自定义类型数据的标准输入输出和文本文件输入输出14 自定义类型数据的二进制文件输入输出15 输入输出流程序实例–输入输出流操作16 输入输出流程序实例–插入运算符和提取运算符重载第五章、模板(7个知识点)01 函数模板的定义和使用02 函数模板程序实例03 类模板的定义04 类模板的使用05 类模板的静态成员06 模板程序实例–函数模板07 模板程序实例–类模板一、客观部分:(单项选择、多项选择、不定项选择、判断)(一)、选择部分1、面向对象方法的基本观点是一切系统都是由( C )构成的。
面向对象程序设计资料整理长大
面向对象程序设计复习资料(2328)一、单项选择题1.假设P是指针, 声明指针s引用指针p正确方法是( )A.int* s&=p B.int &*s=p C.int *&s=pD.int s* &=p2.在C+ +中, 能够为类的所有成员共享的是( )A、枚举成员B、公有数据成员C、私有函数成员D、公有函数成员3.C+ +中, 下列哪个关键字不能提供封装。
( )A、 structB、 unionC、 classD、 case4.下而关于类的复制构造函数的说法正确的是( )A.一个类只能有一个复制构造函数B.能够为void类型C.不能有返回类型D.不能使用缺省参数5.下面叙述正确的是: ( )A.派生类不能够使用私有派生B.保护派生时, 基类的保护成员在派生类中是公有的C.对基类成员的访问能够允许两义性D.赋值兼容规则也适用于多重继承的组合6.定义虚函数使用关键字( )A.: : B.virtual C.& D.->7.在下面几项中, 运算符在C++中能被重载的是( )A .= B.? : C.sizeof D. : :A.结构B.类C.继承D.引用8.在执行下面程序语句之后, num的值为( )int num = 500;int& ref= num;ref = = ref -50;A.450 B.500 C.-50D.无法确定9.所有在函数外面定义的变量, 连同形式参数, 都属于( )A、局部变量B、全局变量C、静态变量D、寄存器变量10.面向对象的程序中, 哪项不是对象的特点。
( )A、多态性B、抽象性和封装性C、中断D、继承性11.下面在半初始化说法正确的是( )A.初始化列表能够初始化任何类B.初始化列表也也能够初始化具有私有成员的类C.初始化列表只能初始化公有数据成员D.初始化列表能够初始化所有数据成员12.产生编译时的多态性的必要条件是使用( )A.静态成员 B.友元函数 C.重载成员函数D.虚函数13.operator经常和C++的一个运算符连用,构成一个运算符函数名.运算符函数的返回类型不能是( )A.voidB.charC.intD.float14.下面是对C++运算符的叙述, 正确的叙述是( )A.只有类运算符 B.只有友元运算符C.同时具有类运算符和友元运算符 D.同一个运算符只能重载一次15.在面向对象的设计中,一切都是围绕着什么展开的( )A.类B.结构C.数据类型D.对象16.下面哪项不能算是面向对象程序设计所具有的显著特点( )A .封装 B.继承 C.抽象 D.递归17.下面选项中哪一项不是结构和类的共同特性( )A.对象能够用作数组的元素 B.在缺省情况下, 成员是私有的C.对象之间能够相互赋值 D.能够说明指向对象的指针和引用18.下面有关类性质说法错误的是( )A.一个类能够有多个构造函数,但只有一个析构函数B.析构函数和构造函数都不能有返回类型C.不能够给析构函数指定参数D.一个类中不能够说明具有类类型的数据成员19.下面叙述不正确的是( )A.成员的访问能力取决于派生方式B.基类的私有成员在公有派生类中不可访问C.对象能够访问所有成员D.公有基类成员在保护派生中保护的20.成为抽象类的一个条件是这个类( )A.至少有一个纯虚函数 B.至少有一个虚函数C.只含有一个纯虚函数 D.只含有一个虚函数21.下列叙述正确的是( )A.有1个运算符不能被重载 B.有2个运算符不能被重载C.有3个运算符不能被重载 D.有4个运算符不能被重载22.在以下选项中, 不属于模板特点的选项是( )A.处理数据时, 处理的是不同类型的相同操作B.声明不需要给出数据类型C.对于相同的数据类型产生不同的实例D.对于不同的数据类型能够产生不同的实例23.经过什么建立类树( )A.类B.虚函数C.多重继承D.单一继承24.C++使用新的分配动态内存的函数是( )A . malloc ( ) B. free( ) C. delete D. new 25.以下关于C+ +对象特点叙述不正确的是( )A、对象能够进行四则运算 C、对象能够用作数组的元素C、对象能够用作函数参数D、对象之间能够相互赋值26.有关复制构造函数说法错误的是( )A.复制构造函数不能使用初始化列表B. 复制构造函数不能有返回值C. 复制构造函数名与类名相同并能够有多个复制构造函数D. 复制构造函数的参数能够为引用对象27.对友元函数描述正确的是( )A.一个类的友元函数是该类的一个特殊成员函数B.一个类的友元函数能够访问类的所有数据成员C.友元函数只允许访问该类对象的私有成员D.友元函数只允许访问该类的公有成员28.进行文件操作时需要包含的头问家是( )A.iostream.h B. fstream.h C.stdio.h D. stdlib.h29.下面关于类模板叙述不正确的是( )A.声明类模板”; ”号结束B.不能重载运算符C.能够使用友元函数D.能使用虚函数30.系统不会为类自动建立什么成员函数( )A.默认构造函数 B.默认析构函数C.默认虚析构函数D.默认赋值运算赋二、填空题:1.函数 int * func(void)的返回类型是__ _ __.2.C+ +中, 关键字用作联合.3.关键字virtual能够用来声明类.4.抽象类至少要含有一个 ,这种函数属于虚函数5.成员函数”void print( )const;”是类的函数, 它只能被const对象调用。
面向对象程序设计复习资料
面向对象程序设计期末总复习题一、单项选择题1.下面关于对象概念的描述中,_______是错误的。
〔B〕A.对象代表着正在创立的系统中的一个实体C.对象是一个状态和操作(或方法)的封装体2. 继承机制的作用是:(C)A.信息隐藏B.数据封装C.定义新类D.数据抽象(D)A.析构函数有且只有一个B.析构函数无任何函数类型D.析构函数不能是虚函数(A)A.提高程序的运行效率B.加强类的封装性C.实现数据的隐藏性5.通常拷贝构造函数的参数是__________。
(C)A.某个对象名B.某个对象的成员名C.某个对象的引用名6.如果在基类中将show声明为不带返回值的纯虚函数,正确的写法是________。
(C)A.virtual show()=0;B.virtual void show();C.virtual void show()=0;D.void show=0 virtual;7.下面关于友元的描述中,错误的选项是_________。
(D)8.在C++中,_________运算符不能重载。
(B)A. +B.?:C.-D.<=9.以下关于运算符重载的描述中,________是正确的。
(D)A.运算符重载可以改变操作数的个数C.运算符重载可以改变结合性10. 在以下函数原型中,可以作为类AA构造函数的是_________(D)A.void AA(int) ; B.int AA( ) ; C.AA(int)const; D.AA(int);11.在声明类时,下面的说法正确的选项是_________。
(C)A.可以在类的声明中给数据成员赋初值C.private,public,protected可以按任意顺序出现D.没有用private,public,protected定义的数据成员是公有成员12.继承具有________,即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员。
(B)A.规律性B.传递性C.重复性13.在多重继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规那么___________。
面向对象程序设计复习
(1) 定义重载函数有哪些要求?(2) 说明const关键字在类成员函数中的两种用法?void print() const;void set(const int &set_val);(3) 什么是this指针? 在静态成员函数和友元函数中能否使用this指针?(4) 动态联编体现了面向对象程序设计的什么思想?怎样实现动态联编?(5) 若一个类包含有指向堆内存的指针数据成员,且类对象之间要互相赋值。
则这个类应该至少定义那些成员函数?void main(){CLine line;line.getLine(); //采用动态数组从键盘输入一行含任意字符个数的字符串line.printLine(); //打印字符串}#include <iostream.h>#include <string.h>class CCourse{public:CCourse() { cout << “Course default constructor” << endl; }virtual void study() = 0;void select() { cout << “Select course” << endl; }~CCourse() { cout << “Course default destructor” << endl; }};class CCPlusPlus : public CCourse{public:CCPlusPlus() { cout << “OOP default constructor” << endl; }virtual void study() { cout << “Study object oriented programming” << endl; }void select() { cout << “Select object oriented programming” << endl; }~CCPlusPlus() { cout << “OOP default destructor” << endl; }};class CStudent{private:CCPlusPlus course;int credit;char name[10];public:void select() { cout << name << “”; course.select(); }void attend() { cout << name << “”; course.study(); credit += 3; }~CStudent() { cout << “Destructing ” << name << endl; }};void main(){CStudent student1(“张三”), student2(“李四”);CCPlusPlus oop;CCourse *p_course;// ①student1.select();student2.attend();p_course = &oop;p_course->select();p_course->study();// ②}(1)当程序运行到①处时,写出程序运行的输出结果 (5分)(2) 当程序运行到②处时,程序会在第(1)问的基础上增加哪些输出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.对象(1)从概念层面讲,对象是某种拥有责任的抽象。
(2)从规格层面讲,对象是一系列可以被其他对象使用的公共接口。
(3)从语言实现层面讲,对象封装了代码和数据。
2.软件开发中的经典阶段:需求、分析、设计、规范、实现、测试、部署、维护。
3.设计7原则:开闭原则、里氏代换原则、依赖倒转原则、合成/聚合复用原则、迪M特原则、接口隔离原则、单一职责原则。
4.面向对象的方法学:UML(统一建模语言)、RUP(统一软件开发过程)、XP(极限编程)。
开发方法:Booch、Coad、OMT、UML、OOSE、Wirfs—Brock5.OOA——运用面向对象方法进行需求分析。
OOD——运用面向对象方法进行系统设计。
OOP——运用面向对象方法进行程序设计。
6.OOA的基本任务:是运用面向对象的方法,对问题域和系统责任进行分析和理解,对其中的事物和它们之间的关系产生正确的认识,找出描述问题域及系统责任所需的类及对象,定义这些类和对象的属性和操作,以及它们之间所形成的结构、静态联系和动态联系。
最终目的:是产生一个符合用户需求,并能够直接反映问题域和系统责任的OOA模型及其详细说明。
优点:(1)加强了对问题域和系统责任的理解。
(2)改进与分析有关的各类人员之间的交流。
(3)对需求的变化具有较强的适应性。
(4)支持软件复用。
OOA的三大策略是:属性策略、方法策略、对象策略。
7.(1)封装:是指对象在其操作中隐藏属性。
它是一种信息隐蔽技术,用户只能看见对象封装界面上的信息,对象的内部实现对用户是隐蔽的。
封装的目的是使对象的使用者和生产者分开,使对象的定义和实现分开。
例如:要从同事那里借钱,在商店购买食物,就不会抢夺同事的钱包,大翻一通,看看里面是否有足够的钱。
而应该询问他们是否可以借你一些钱,他们就会自己翻钱包。
以表示圆的一个对象作为封装的例子。
圆的操作应能计算出半径、直径、周长和面积。
假定选择存储直径,要访问直径的程序员都会选择存储直径属性,而不是通过“获取直径”的操作来访问。
如果在软件的后续版本中要存储的是半径,就必须找出系统中直接访问直径的所有代码,并更正它们,有了封装,就不会有问题。
(2)继承:可以指定类从父类中获取一些特性,再添加它自己的独特特性。
继承是类间的基本关系,它是基于层次关系的不同类共享数据和操作的一种机制。
父类中定义了其所有子类的公共属性和操作,在子类中除了定义自己特有的属性和操作外,可以继承父类的属性和操作,也可以对父类中的操作重新定义其实现方法。
例如:在面向对象中,我们可以把洗衣机、电冰箱、微波炉、收音机看成是家用电气类的子类,也可以说家用电器类是这些类的超类。
家用电器类具有的属性OnOffSwitch和electricWire,具有turnOn()和turnOff()操作。
因此,如果你知道某物是家用电器,那么就会立即知道它具有家用电器类的属性和操作,这种关系就是继承。
每个家用电器类的子类都继承了家用电器类的特征。
同时,每个子类都增加了自己的属性和操作。
(3)多态:是指同一操作作用于不同的对象上可以有不同的解释,并产生不同的执行结果。
例如:“画”操作,作用在“矩形”对象上,则在屏幕上画一个矩形;作用在“圆”对象上,则在屏幕上画一个圆。
也就是说,相同操作的消息发送给不同对象时,每个对象将根据自1 / 9己所属类中定义的这个操作方法去执行,从而产生不同的结果。
6.RUP(统一软件开发过程):是一个面向对象且基于网络的程序开发方法论。
RUP好像一个在线的指导者,它可以为所有方面和层次的程序开发提供指导方针,模版以及事例支持。
RUP 是理解性的软件工程工具,它把开发中面向过程的方面和其他开发的组件整合在一个统一的框架内。
RUP的本质:(1)RUP是风险驱动的、基于Use Case技术的、以架构为中心的、迭代的、可配置的软件开发流程。
(2)我们可以针对RUP所规定出的流程,进行客户化定制,定制出适合自己组织的实用的软件流程。
因此RUP是一个流程定义平台,是一个流程框架。
7.RUP中有9个核心工作流,分为6个核心过程工作流(商业建模、需求、分析和设计、实现、测试、部署工作流)以及3个核心支持工作流(配置和变更管理、工程管理、环境工作流)。
尽管6个核心过程工作流可能使人想起传统瀑布模型中的几个阶段,但应注意迭代过程中的阶段是完全不同的,这些工作流在整个生命周期中一次又一次被访问。
9个核心工作流在工程中轮流被使用,在每一次迭代中以不同的重点和强度重复。
8.RUP是一个基于6个最佳开发实践的流程定义产品:(1)迭代式开发(2)需求管理(3)基于组建的体系架构(4)可视化建模(5)持续的质量管理(6)配置管理。
9.设计模式:是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。
分类:创建型模式、行为型模式、结构型模式、Singleton模式。
2 / 91.使用简单工厂模式设计计算器程序//Computer.javapublic class Computer{public static void main(String[] args) throws IOException{String strA 。
String strB 。
String strO 。
try{BufferedReaderbr = new BufferedReader(newInputStreamReader(System.in))。
祓瑳浥漮瑵瀮楲瑮尨请输入数据A:)。
strA = br.readLine( )。
祓瑳浥漮瑵瀮楲瑮尨请选择运算符号(+、-、*、/):)。
strO= br.readLine()。
祓瑳浥漮瑵瀮楲瑮尨请输入数据B:)。
strB = br.readLine( )。
String strResult = \。
Operation oper = null。
IFactory operFactory = null 。
if(strO.equals(+)) {operFactory= new AddFactory()。
}if(strO.equals(-)) {operFactory = new SubFactory()。
}oper = operFactory.createOperation()。
oper.SetNumberA(Double.valueOf(strA).doubleValue())。
oper.SetNumberB(Double.valueOf(strB).doubleValue())。
strResult = Double.toString(oper.GetResult())。
System.out.print(strResult)。
}catch(Exception e) {}}}优点:简单工厂模式就是由一个工厂类根据参数来决定创立出哪一种产品类的实例。
专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模3 / 9 式。
2.策略模式:商场促销public class Context {public Strategy strategy 。
public Context(char name) throws Exception {switch(name){case ‘ A ':strategy = new ConcreteStrategy A() 。
break 。
4 / 9case ‘ B ':strategy = new ConcreteStrategy B() 。
break 。
case ‘ C ':strategy = new ConcreteStrategy C() 。
break 。
default :throw new Exception(“没有此类输入”)。
}}public void contextInterface() {strategy.algorithInterface()。
}}public abstract class Strategy {public abstract void algorithInterface() 。
}public class ConcreteStrategyA extends Strategy {public abstract void algorithInterface() {system.out.println(“打折算法”) 。
}}public class ConcreteStrategyB extends Strategy {public abstract void algorithInterface() {system.out.println(“满100送60算法”) 。
}}public class ConcreteStrategyC extends Strategy {public abstract void algorithInterface() {system.out.println(“正常收费,不参加活动!”) 。
}}public class Client {public static void main(String[] args) throws Exception {Context context 。
context = new Context(‘A') 。
context.contextInterface() 。
}}5 / 9 StrategyContext+algorithInterface():void+contextInterface():voidconcreteStrategyconcreteStrategycon creteStrategyAalgorithInterface( ):voidalgorithInterface( ):voidalgorithInterface( ):void+特点:属于设计模式中的对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单)Strategy(1 独的类,使它们可相互替换。
本模式使得算法可独立于使用它的客户而变化。
)它提供了一种用多个行为中的一个行为来配置一个类的方法。
(2 )它需要使用一个算法的不同变体。
(3 )它以避免暴露复杂的、与算法相关的数据结构。
(4并且这些行为在这个类的操作中以多个条件语句的形式出现。
将相关的条)一个类定义了多种行为,(5 Strategy 类中以代替这些条件语句。
件分支移入它们各自的3.装饰模式模式展示如Adapter中的打桩示例,在Adapter中有两种类:方形桩、圆形桩,Adapter 举模式中,我们是要在打桩时增加一些额外功能,比如:Decorator何综合使用这两个类,在挖坑,在桩上钉木板等,不关心如何使用两个不相关的类。