北方工业大学面向对象设计期末样题
面向对象程序设计期末复习题及答案
C++面向对象程序设计复习试题类型1、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。
15题,每小题2分,共30分) [主要从作业题目中抽出来]2. 填空题。
(10题,每小题3分,共30分)3、阅读程序,写出程序运行结果。
【也称计算题】(3题,每小题5分,共15分)4、程序编制题【也称综合分析题】。
(第1、2题每题8分,第3题9分,共25分) 重点复习内容打*号是重点,打▲号是编程题出题范围* 基本概念,对象,消息,类。
面向对象系统特性,封装性,继承性,多态性。
*▲C++类的构成,类与对象,构造与析构,动态存储,类嵌套。
静态成员,对象数组,友元。
*函数重载。
运算符重载。
*引用定义与引用参数* 基类与派生类的定义。
* 基类及派生类的访问权(含派生类对基类的访问、通过派生类对象对基类的访问)和初始化。
多继承与虚基类。
*多态性与虚函数。
纯虚函数、抽象类。
*▲函数模板。
*▲使用类来定义对象并在程序中的应用题型样题填空题 1. 假定AB为一个类,则执行“AB a[10];”语句时,系统自动调用该类的构造函数的次数为_________。
答案:102.可以用p.a的形式访问派生类对象P的基类成员a,其中a是_________。
答案:公有继承的公有成员3.能作为重载函数的调用的依据是_________。
答案:参数个数、参数类型4.在进行完任何C++流的操作后,都可以用C++流的有关成员函数检测流的状态;其中只能用于检测输入流是否结束状态的操作函数名称是_________答案:eof5.函数重载是指_________。
答案:两个或两个以上的函数取相同的函数名,但形参的个数或类型不同6.在派生类中重新定义虚函数时必须在_________ 方面与基类保持一致。
答案:参数个数阅读程序例题【计算题】1.分析以下程序的执行结果#include<iostream.h>class Sample{int x,y;public:Sample() {x=y=0;}Sample(int a,int b) {x=a;y=b;}~Sample(){if(x==y)cout<<“x=y”<<endl;elsecout<<“x!=y”<<endl;}void disp(){cout<<“x=”<<x<<“,y”=<<y<<endl;}};void main(){Sample s1,s2(2,3);s1.disp();s2.disp();}解:x=0,y=0x=2,y=3x!=yx=y2.分析以下程序的执行结果#include<iostream.h>int add(int x,int y){return x+y;}int add(int x,int y,int z){return x+y+z;}void main(){int a=4,b=6,c=10;cout<<add(a,b)<<,<<add(a,b,c)<<endl; }解:10,20 3.分析以下程序执行结果#include<iostream.h>int add(int x,int y){return x+y;}double add(double x,double y){return x+y;}void main(){int a=4,b=6;double c=2.6,d=7.4;cout<<add(a,b)<<","<<add(c,d)<<endl; }解:10,104.分析以下程序执行的结果#include<iostream.h>class Sample{int x,y;public:Sample(){x=y=0;}Sample(int a,int b){x=a;y=b;}void disp(){cout<<"x="<<x<<",y="<<y<<endl;}};void main(){Sample s1,s2(1,2),s3(10,20);Sample *pa[3]={&s1,&s2,&s3};for(int i=0;i<3;i++)pa[i]->disp();}解:x=0,y=0x=1,y=2x=10,y=20 5. 分析以下程序的执行结果:#include<iostream.h>class base{int n;public:base(){};base (int a){cout << "constructing base class" << endl; n=a;cout << "n= "<< n << endl;}~base() { cout << "destructing base class" << endl; }};class subs : public base{int m;public:subs(int a, int b) : base(a){cout << "constructing sub class "<< endl; m=b;cout << "m= "<< m << endl;}~subs() { cout << "destructing sub class "<< endl; }};void main (){subs s(1,2);}解:constructing base classn= 1constructing sub classm= 2destructing sub classdestructing base class6.分析以下程序的执行结果:#include <iostream.h>class Sample{protected:int x;public:Sample() { x=0; }Sample(int val) { x=val; }void operator++() { x++; }};class Derived:public Sample{int y;public:Derived():Sample(){ y=0; }Derived(int val1,int val2):Sample(val1){ y=val2; }void operator--(){ x--;y--;}void disp(){cout<<"x="<< x << ",y=" << y << endl; }};void main (){Derived d(3,5);d.disp();d++;d.disp ();d--;d--;d.disp();}解:x=3,y=5x=4,y=5x=2,y=37 分析以下程序执行结果:#include <iostream.h>class A{public:A(char *s) { cout << s << endl; }~A() {}};class B:public A {public:B(char *sl,char *s2) :A(sl){cout << s2 << endl;}};class C:public A{public:C(char *sl,char *s2) :A(sl){cout << s2 << endl;}};class D:public B,public C{public:D(char *sl,char *s2,char *s3,char *s4) :B(sl,s2),C(sl,s3){cout << s4 << endl;}};void main (){D d("class A","class B","class C","class D");}解:class Aclass Bclass Aclass Cclass D 补充例题1.分析以下程序的执行结果#include<iostream.h>template <class T>T max(T x,T y){ return (x>y?x:y); }void main(){ cout<<max(2,5)<<“,”<<max(3.5,2.8)<<endl; }解答:5,3.5 2.分析以下程序的执行结果#include<iostream.h>void main(){int a[]={10,20,30,40},*pa=a;int *&pb=pa;pb++;cout<<*pa<<endl;}解答:输出为:20 3.分析以下程序的执行结果#include<iostream.h>template <class T>T abs(T x){ return (x>0?x:-x); }void main(){ cout<<abs(-3)<<“,”<<abs(-2.6)<<endl; }解答:输出为:3,2.64.分析以下程序的执行结果#include<iostream.h>class Sample{char c1,c2;public:Sample(char a){c2=(c1=a)-32;}void disp(){ cout<<c1<<“转换为”<<c2<<endl; } };void main(){Sample a('a'),b('b');a.disp();b.disp();}解答:a转换为Ab转换为B 5.分析以下程序的执行结果#include<iostream.h>void main(){int a;int &b=a; // 变量引用b=10;cout<<“a=”<<a<<endl;} 解答:输出为:a=10 6.分析以下程序的执行结果#include<iostream.h>class Sample{int x;public:Sample(){};Sample(int a){x=a;}Sample(Sample &a){x=a.x++ +10;}void disp(){cout<<“x=”<<x<<endl; }};void main(){ Sample s1(2),s2(s1);s1.disp();s2.disp();}解答:x=3 // ++运算的结果x=12 // 2+107.分析以下程序的执行结果#include<iostream.h>class Sample{int x;public:Sample(){};Sample(int a){x=a;}Sample(Sample &a){x=a.x+1;}void disp(){cout<<“x=”<<x<<endl; } };void main(){ Sample s1(2),s2(s1);s2.disp();}解答:输出为:x=3。
《面向对象高级设计》期末考试试卷(B卷)及答案
《面向对象高级设计》期末考试试卷(B 卷) 适用专业:1. 按要求编写Java 应用程序。
(20分) (1)建立一个名叫Cat 的类: 属性:姓名、毛色、年龄 行为:显示姓名、喊叫 (2)编写主类: 创建一个对象猫,姓名为“妮妮”,毛色为“灰色”,年龄为2岁,在屏幕上输出该对象的毛色和年龄,让该对象调用显示姓名和喊叫两个方法。
ChongZai ,该类中有3个重载的方法void print();其次, 再编写一个主类来测试ChongZai 类的功能。
(20分)3. 编写一个Java应用程序,该程序包括3个类:Monkey类、People类和主类E。
(30分)(1) Monkey类中有个构造方法:Monkey (String s),并且有个public void speak() 方法,在speak方法中输出“咿咿呀呀......”的信息。
(2)People类是Monkey类的子类,在People类中重写方法speak(),在speak方法中输出“小样的,不错嘛!会说话了!”的信息。
(3)在People类中新增方法void think(),在think方法中输出“别说话!认真思考!”的信息。
(4)在主类E的main方法中创建Monkey与People类的对象类测试这2个类的功能。
Vehicle,包含的属性有车轮个数wheels和车重weight。
小车类Car是Vehicle的子类,其中包含的属性有载人数loader。
卡车类Truck是Car类的子类,其中包含的属性有载重量payload。
每个类都有构造方法和输出相关数据的方法。
最后,写一个测试类来测试这些类的功能。
(30分)《面向对象高级设计》期末试卷答案(B)1///////////////catpublic class Cat {String name;String color;String age;public Cat(String name,String color,String age){ = name;this.color = color;this.age = age;}void SayName(){System.out.println(name);}void Call(){System.out.println(" 咪咪");}}//////////////TestCarpublic class TestCar {public static void main(String[] args) {Cat cat = new Cat("妮妮","灰色","2");System.out.println();System.out.println(cat.color);cat.SayName();cat.Call();}}2//////////////// ChongZaipublic class ChongZai {void print(){System.out.println("重载1");}void print(String a){System.out.println("重载方法2");}void print(String a,String b){System.out.println("重载方法3");}}////////////// TestChongZaipublic class TestChongZai {public static void main(String[] args) { ChongZai cz = new ChongZai();cz.print();cz.print("a");cz.print("a", "b");}}3////////// Monkeypublic class Monkey {public Monkey(String s){}public void speak(){System.out.println("咿咿呀呀......");}}//////////////Peoplepublic class People extends Monkey {public People(String s) {super(s);}public void speak() {System.out.println("小样的,不错嘛!会说话了!");}void think(){System.out.println("别说话!认真思考!");}}/////////////////Epublic class E {public static void main(String[] args) {Monkey monkey = new Monkey("a");monkey.speak();People people = new People("a");people.speak();people.think();}}4///////////Vehiclepublic class Vehicle {String wheels;String weight;public Vehicle(String wheels,String weight){this.weight = weight;this.wheels = wheels;}@Overridepublic String toString() {return wheels+weight;}}/////////Carpublic class Car extends Vehicle{String loader;public Car(String wheels, String weight,String loader) { super(wheels, weight);this.loader = loader;}public String toString() {return super.toString()+loader;}}//////////////Truckpublic class Truck extends Car{String payload;public Truck(String wheels, String weight, String loader,String payload) {super(wheels, weight, loader);this.payload = payload;}public String toString() {return super.toString()+payload;}。
(完整word版)面向对象程序设计期末复习题及答案
(完整word版)面向对象程序设计期末复习题及答案C++面向对象程序设计复习试题类型1、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。
15题,每小题2分,共30分) [主要从作业题目中抽出来]2。
填空题。
(10题,每小题3分,共30分)3、阅读程序,写出程序运行结果。
【也称计算题】(3题,每小题5分,共15分)4、程序编制题【也称综合分析题】. (第1、2题每题8分,第3题9分,共25分)重点复习内容打*号是重点,打▲号是编程题出题范围*基本概念,对象,消息,类。
面向对象系统特性,封装性,继承性,多态性.*▲C++类的构成,类与对象,构造与析构,动态存储,类嵌套.静态成员,对象数组,友元。
*函数重载。
运算符重载。
*引用定义与引用参数* 基类与派生类的定义。
*基类及派生类的访问权(含派生类对基类的访问、通过派生类对象对基类的访问)和初始化。
多继承与虚基类.*多态性与虚函数.纯虚函数、抽象类。
*▲函数模板。
*▲使用类来定义对象并在程序中的应用题型样题填空题1。
假定AB为一个类,则执行“AB a[10];"语句时,系统自动调用该类的构造函数的次数为_________。
答案:102。
可以用p。
a的形式访问派生类对象P的基类成员a,其中a是_________。
答案:公有继承的公有成员3.能作为重载函数的调用的依据是_________。
答案:参数个数、参数类型4.在进行完任何C++流的操作后,都可以用C++流的有关成员函数检测流的状态;其中只能用于检测输入流是否结束状态的操作函数名称是_________答案:eof5。
函数重载是指_________。
答案:两个或两个以上的函数取相同的函数名,但形参的个数或类型不同(完整word版)面向对象程序设计期末复习题及答案6。
在派生类中重新定义虚函数时必须在_________ 方面与基类保持一致。
答案:参数个数阅读程序例题【计算题】1.分析以下程序的执行结果#include〈iostream.h>class Sample{int x,y;public:Sample() {x=y=0;}Sample(int a,int b) {x=a;y=b;}~Sample(){if(x==y)cout〈〈“x=y”〈<endl;elsecout〈〈“x!=y"〈〈endl;}void disp(){cout〈〈“x=”<〈x〈<“,y”=<<y<<endl; }};void main(){Sample s1,s2(2,3);s1.disp();s2.disp();}解:x=0,y=0x=2,y=3x!=y x=y2.分析以下程序的执行结果#include〈iostream。
面向对象期末试卷 A(答案)
******************************************班级:******************************学号:************************************姓名:************************************共3页第1页得分 阅卷人************ ****** ****** ****** ****** ****** ****** 班级: ****** ****** ****** ****** ****** 学号: ****** ****** ****** ****** ****** ****** 姓名: ****** ****** ****** ****** ****** ******共3页 第21. (9分)class Point { private: int x, y; public:Point(){x=y=0;} Point(int x0,int y0) {x=x0;y=y0;} int GetX() { return x; } int GetY() { return y; }void Print(){cout<<"Point("<<x<<","<<y<<")"<<endl;} ___(1)___; //友元函数声明 ___(2)___; //友元函数声明};Point operator+(Point& pt,int dd) //加号操作符重载函数,实现Point 类对象与整数加法 { Point temp=pt; temp.x+=dd; temp.y+=dd; return temp;}Point operator+(Point& pt1,Point& pt2) //加号操作符重载函数,实现两个Point 类对象的加法 { Point temp=pt1; temp.x+=pt2.x; ___(3)___; return temp;}答案:(1) friend Point operator+(Point& pt,int dd) ----3分(2) friend Point operator+(Point& pt1,Point& pt2) ----3分 (3) temp.y+=pt2.y ----3分 2.(12分) 已知一个类的定义如下: #include<iostream.h> class AA { private:int a[10]; int n;public:void SetA(int aa[], int nn); //用数组aa 初始化数据成员a ,用nn 初始化数据成员n int MaxA(); //从数组a 中前n 个元素中查找最大值void SortA(); //采用选择排序的方法对数组a 中前n 个元素进行从小到大排序void InsertA();//采用插入排序的方法对数组a 中前n 个元素进行从小到大排序 void PrintA(); //依次输出数组a 中的前n 个元素};该类中InsertA()函数的实现如下,请在标号位置补充适当的内容。
面向对象分析与设计期末考试试卷(B卷)
面向对象分析与设计期末考试试卷(B卷)一、单项选择题(每题2分,共30分。
将正确答案填入下表)1.下面关于面向对象方法中消息的叙述,不正确的是()。
A.键盘、鼠标、通信端口、网络等设备一有变化,就会产生消息。
B.操作系统不断向应用程序发送消息,但应用程序不能向操作系统发送消息。
C.应用程序之间可以相互发送消息。
D.发送与接收消息的通信机制与传统的子程序调用机制不同。
2.面向对象技术中,对象是类的实例。
对象有三种成分:()、属性和方法(或操作)。
A.标识B.规则C.封装D.消息3~5:在UML提供的图中,可以采用( 3 )对逻辑数据库模型建模;( 4 )用于接口、类和协作的行为建模,并强调对象行为的事件顺序;( 5 )用于系统的功能建模,并强调对象间的控制流。
A.用例图B.构件图C.活动图D.类图A.协作图B.状态图C.序列图D.对象图A.状态图B.用例图C.活动图D.类图6.采用面向对象技术开发的应用系统的特点是()。
A.重用性更强B.运行数度更快C.占用存储量小D.维护更复杂7.继承反映了类间的一种层次关系,而()反映了一种整体与部分的关系。
A.继承B.组合C.封装D.多态8.下列叙述中正确的是()。
A.面向对象程序设计语言都不支持过程化的程序设计B.面向对象系统只可采用面向对象设计语言实现C.某些过程化程序设计语言也可实现面向对象系统D.面向对象程序设计语言不支持对成员变量的直接访问9.面向对象的特点主要概括为()。
A.可分解性、可组合性、可分类性B.继承性、封装性、多态性C.抽象性、继承性、封装性、多态性D.封装性、易维护性、可扩展性、可重用性10.下列关于面向对象方法中描述中错误的是()。
A.使用设计模式有助于在软件开发中应用面向对象技术B.选择面向对象程序设计语言时需要考虑开发人员对其的熟悉程度C.UML作为一种可视化建模语言需要与RUP开发过程同时使用D.目前在软件生命周期的分析、设计、实现和测试中均可以应用面向对象方法11.在类图中,那个类图中的类Order所生成的代码具有public class Order {public Customer recipient;}的形式?()A. B.C D.12.关于用例与类的对比中()是错误的。
面向对象期末考试答案
一、填空(15分)1、类之间的静态联系称作关联。
•在实例化后,由类产生对象,链是关联的实例。
•在系统实现时,关联采用对象的属性来实现。
2、用例图用于建立需求模型,描述用户的需求。
对象图是面向对象分析中的基本模型,属于静态结构模型。
3、顺序图(时序图)、通信图、活动图、状态图用于描述系统的行为方面的特征,属于动态结构模型。
4、时序图构成:参与者、相互协作的对象、对象的生命线、参与者与对象之间发送的消息、执行规约5、表示[可见性] 属性名[:类型][ =初始值]可见性分为+表示:(公有的)、#表示:(受保护的)、-表示:(私有的)、~(包,只有在同一包中声明的类能够使用这一属性)。
二、名词解释(15分)1、面向对象方法:是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统的软件开发方法。
2、类:是具有相同属性和操作的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和操作务两个主要部分。
类的作用是用来创建对象,对象是类的一个实例。
3、抽象:指从事物中舍弃个别的、非本质的、与问题域无关的特征,而抽取共同的、本质特征的、相关的做法。
4、多态性:在具有继承关系的类层次结构中可以定义同名的操作或属性,但这些属性或操作具有不同的含义,即具有不同的数据类型或表现出不同的行为。
(“同名不同参”或“同名不同类”)5、OOA模型:就是通过面向对象的分析所建立的系统分析模型。
用况:一个用况是对参与者使用系统的一项功能的描述,是一组动作序列的描述,是一项请求与响应。
(三、简答(45分)1、继承和泛化关系特殊类拥有其一般类的全部属性与操作,称作特殊类对一般类的继承。
一般类对特殊类的抽象关系叫泛化关系(简称泛化)。
2、聚合与组合有区别,请说明他们间的区别,并指出下图中哪图是聚合?聚合刻画了现实事物之间的构成关系,体现“整体——部分”关系。
而关联没有组成关系或拥有关系。
如例题中的c图3、简述下图中体现的面向对象的基本思想答:(1)第一次抽象封装:事物——对象①首先,直接以问题域(现实世界)中的事物为中心来思考问题、认识问题;②然后,根据这些事物的本质特征和系统责任,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。
《面向对象程序设计》期末考核试题样例及解答
《面向对象程序设计》期末考核试题样例及解答一、单项选择(每小题1分,12小题,共12分)1. 源程序文件的缺省扩展名为( )。
A. B. C. D.2. x>0 5的相反表达式为()。
A. x<=0 5B. x<=0 5C. x>0 5D. x>0 53. 在下面的字符数组定义中,有语法错误的是( )。
A. a[20]=“”;B. a[]=“55.”;C. a[15];D. a[10]=’5’;4. 以下正确的函数原型语句是( )。
A. ( y)B. ( y)C. ();D. ( );5. 在下面存储类中,()的对象不是局部变量。
A. 外部静态类B. 自动类C. 函数形参D. 寄存器类6. 假定有“ { [40]; ;}; * ;”,则正确的语句是()。
A. (>,””);B. (,””);C. (*,””);D. ((*)->,””);7. 软件产品所具有的全部或部分地再用于新的应用的能力称为该软件的()。
A. 可维护性B. 可复用性C. 兼容性D. 正确性8. 在多文件结构的程序中,通常把含有()函数的文件称为()。
A. 主文件B. 实现文件C. 程序文件D. 头文件9. 在一个用链表实现的队列类中,假定每个结点包含的值域用表示,包含的指针域用表示,链队的队首指针用表示,队尾指针用表示,若链队为空,则进行插入时必须把新结点的地址赋给( )。
A. B.C. 和D. 或10. 假定为一个类,则执行“ a, b(2), c[3], *;”语句时共调用该类无参构造函数的次数为( )。
A. 5B. 6C. 3D. 411. 引入友元的主要目的是为了()。
A. 增强数据安全性B. 提高程序的可靠性C. 提高程序的效率和灵活性D. 保证类的封装性12. 如果是类B在类A的基础上构造,那么,就称()。
A. 类A为基类或父类,类B为超类或子类B. 类A为基类、父类或超类,类B为派生类或子类C. 类A为派生类,类B为基类D. 类A为派生类或子类,类B为基类、父类或超类二、填空(每空1分,15小题,共18分)1. 语言是在语言的基础上发展起来的。
面向对象程序设计期末综合练习一(单选题)(精选五篇)
面向对象程序设计期末综合练习一(单选题)(精选五篇)第一篇:面向对象程序设计期末综合练习一(单选题)面向对象程序设计期末综合练习一(单选题)单选题1.C++源程序文件的缺省扩展名为(A)。
A.cppB.exeC.objD.lik 2.由C++源程序文件编译而成的目标文件的缺省扩展名为(C)。
A.cpp B.exe C.obj D.lik 3.由C++目标文件连接而成的可执行文件的缺省扩展名为(B)。
A.cpp B.exe C.obj D.lik 7.程序中主函数的名字为(A)。
A.mainB.MAINC.MainD.任意标识符 8.C++程序的基本模块为(D)。
A.表达式B.标识符C.语句D.函数9.可用作C++语言用户标识符的一组标识符是(B)。
A.void define +WORDB.a3_b3 _123 YNC.for-abc CaseD.2a DO sizeof 38.以下说法中正确的是(B)。
A.C++程序总是从第一个定义的函数开始执行B.C++程序总是从main函数开始执行C.C++函数必须有返回值,否则不能使用函数D.C++程序中有调用关系的所有函数必须放在同一个程序文件中39.以下叙述中不正确的是(C)。
A.在一个函数中,可以有多条return语句B.函数的定义不能嵌套,但函数的调用可以嵌套C.函数必须有返回值D.不同的函数中可以使用相同名字的变量40.函数重载是指(A)。
A.两个或两个以上的函数取相同的函数名,但形参的个数或类型不同B.两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同C.两个以上的函数名字不同,但形参的个数或类型相同D.两个以上的函数取相同的函数名,并且函数的返回类型相同 41.以下关于函数模板叙述正确的是(C)。
A.函数模板也是一个具体类型的函数B.函数模板的类型参数与函数的参数是同一个概念C.通过使用不同的类型参数,函数模板可以生成不同类型的函数D.用函数模板定义的函数没有类型42.下列(C)的调用方式是引用调用。
《面向对象程序设计C++》期末试卷(B)标准答案
《面向对象程序设计C++》期末考试试卷(B)标准答案班级:姓名:学号:分数:一、单项选择题(每小题2分,共40分)1-5.D A C A D6-10.D B C D C11-15.D C B D B16-20.A D C C C二、填空题(前16个空,每空1分,后2个空,每空2分,共20分)1.抽象、实例2.public 、private _ ___、protected 、private _ ___ 3.virtual ___ 4.friend void fun(A &a) _ 5.静态数据成员、静态成员函数6.结合性、优先级_ ___ 7.Template 、 class(或typename) 8.类、结构体___ 9.在创建对象时初始化对象的数据成员___ 10. A operator++(int)___三、阅读程序(共13分)1、a=89,b=56,c=122、12/31/200912/31/20091/1/20101/1/20103、constructing Aconstructing Bconstructing Cdestructing Cdestructing Bdestructing A四、编程题(共27分)1、(10分)Complex::Complex(){real=0;imag=0;}Complex::Complex(double r){real=r;}Complex::Complex(double r,double i){real=r;imag=i;} Complex operator+(Complex &c1,Complex &c2){ Complex c;c.real=c1.real+c2.real; c.imag=c1.imag+c2.imag;return c;}ostream& operator << (ostream& output,Complex& c){ output<<"("<<c.real<<"+"<<c.imag<<"i)"<<endl;return output;}istream& operator >> (istream& input,Complex& c){ cout<<"input real and imaginary part of complex number:";input>>c.real>>c.imag;return input;}2、(17分)class Circle:public Shape{public:Circle(double r){radius=r;}void set(){ cout<<"Please input the value of the circle:"<<endl;cin>>radius;}void show(){ cout<<"the radius of the circle="<<radius<<endl; }double area() {return 3.14159*radius*radius;} private:double radius;};class Square:public Shape{public:Square(double a){this->a=a;}void set(){ cout<<"Please input the value of a:"<<endl;cin>>a;}void show(){ cout<<"a="<<a<<endl; }double area(){return a*a;}private:double a;};int main(){Circle C(5.5);C.show();Square S(9.9);S.show();Shape *s[]={&C,&S};cout<<"total="<<total(s,2)<<endl;return 0;}。
面向对象程序设计-试卷[附参考答案]
《面向对象程序设计》试卷第一学期“本科”期末考试计算机专业面向对象程序设计试题一、单项选择题(每小题1分,共20分)1.由C++源程序文件编译而成的目标文件的默认扩展名为(C)。
A.cppB.exeC.objD.lik2.设x和y均为bool量,则x&&y为真的条件是(A)。
A. 它们均为真B.其中一个为真C. 它们均为假D. 其中一个为假3.在下面的二维数组定义中,正确的语句是(C)。
A.int a[5][];B.int a[][5];C.int a[][3]={{1,3,5},{2}};D.int a[][10];4.在文件包含命令中,被包含文件的扩展名(C)。
A.必须是 .h;B.不能是 .h;C.可以是 .h或 .cpp;D.必须是 .cpp;5.要使语句“p=new int[10][20]”正确,p应事先定义为(D)。
A.int *p;B.int **p;C.int *p[20];D.int (*p)[20];6.在关键字public后定义的成员为该类的(B)成员。
A.私有B. 公有C.保护D.任何7.假定AA为一个类,a为该类私有的数据成员,若要在该类的一个成员函数中访问它,则书写格式最好为(B)。
A.aB.AA::aC.a( )D. AA::a( )8.队列具有(A)的操作特性。
A.先进先出B.先进后出C.进出无序D.仅进不出9.假定AB为一个类,则执行“AB a,b(3),*p”语句时共调用该类构造函数的次数为(D)。
A. 5B. 4C. 3D. 210.在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是(B)。
A. 作为友元函数重载的1元运算符B. 作为成员函数重载的1元运算符C. 作为友元函数重载的2元运算符D. 作为成员函数重载的2元运算符二、填空题(每空2分,共20分)1.当执行cout语句输出endl数据项时,将使C++显示输出屏幕上的光标从当前位置移动到下一行的开始位置。
北方工业大学面向对象设计期末样题
一、判断(共10分每题2分)()1、消息是在面向对象程序设计中用来描述对象之间通信的机制。
()2、程序设计语言中只要提供了类机制,就是面向对象的程序设计语言。
()3、构造函数和析构函数都可以重载,因为它们都是成员函数。
()4、在C++中,只能重载已有的运算符。
()5、函数的参数和返回值类型可以是简单数据类型,也可以是指针、引用、数组和类。
二、选择(共20分每题4分)1、关于对象的描述中,_____是错误的。
A)一个类可以定义多个对象、指向对象的指针和对象数组B)对象的成员表示与C语言中结构变量的成员表示相同C)同一个类创建的若干个对象的数据结构和其内容都是不相同的D)一个对象在定义时就被初始化2、使用_____ 可以节省运行时间,但却增加了目标程序的长度。
A)构造函数B)析构函数C)类型转换函数D)内置函数3、引入友元的主要目的是为了_____。
A)增强数据安全性B)提高程序的可靠性C)提高程序的效率和灵活性D)保证类的封装性4、如果表达式a+b中的“+”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为_____。
A)a.operator+(b) B)b.operator+(a) C)operator+(a,b) D)operator(a+b)5、在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是_____。
A)作为友元函数重载的1元运算符B)作为成员函数重载的1元运算符C)作为友元函数重载的2元运算符D)作为成员函数重载的2元运算符三、写出下列程序的运行结果(共30分每题15分)1、#include <iostream> int Test :: n=1;using namespace std; int main()class Test { Test *p=new Test;{ public: delete p;Test( ) {n + = 2;} cout<<"n="<< Test::getNum()<<endl;~Test( ) {n - = 3;} return 0;static int getNum(){return n;} }private: 运行结果:static int n;};2、#include <iostream> int Box::volume()using namespace std; { return(height*width*length);class Box }{ public:Box(int,int,int); int main()int volume(); {private: Box box1(10,25,20);int height; cout<<"box1 is "<<box1.volume()<<endl;int width; Box box2(15,20,11);int length; cout<<"box2 is "<<box2.volume()<<endl; }; return 0;Box::Box(int h,int w,int len) }{ height=h; 运行结果:width=w;length=len; }四、设计程序(共40分)1)说明并定义一个长方形类CRectangle。
c面向对象程序设计期末考试题及完整参考答案
3.distanee/400.0改为distanee/400或者distanee/400.0f;
4.public float ISwimmable.Run(float distanee)改为float ISwimmable.Run(float distanee)
7.类索引函数的参数类型必须为或。
8.类对接口方法的实现时,在方法名称之前加上接口名,这叫做对接口方法的实现,此时这个方法是这个
类的员,不能通过类的实例来访问。
9.作为一种特殊的函数成员,重载类的操作符时,被重载的操作符必须被声明为公有的和,并通过在关键
字operator后跟操作符来声明。
二、判断题(每小题1分,共5分)
public virtual float Run( float dista nce)
{
retur n dista nce/Speed;
}
public Automobile(float speed)
{
Speed = speed;
}
}
public class Amphicar:Automobile, ISwimmable
Console.WriteLine("{0}空中飞行1000公里需{1}小时", plane, plane.Run(1000)); //调用IFlyable接口Run方法
Con sole.ReadL in e();
}
}
public in terface IFIyable
{
public float Run( float dista nee);
面向对象程序设计》期末试卷及标准答案
⾯向对象程序设计》期末试卷及标准答案《⾯向对象程序设计C++》期末考试试卷(A)班级:姓名:学号:分数:试卷说明:本套试题共四个⼤题,全部题⽬都答在答题纸上,写在其他地⽅均⽆效。
(答题纸在本套试卷的第10页上)⼀、选择题(每⼩题2分,共40分)1、C++是(C )。
A. ⾯向对象的程序设计语⾔B. ⾯向过程的程序设计语⾔C. 既⽀持⾯向对象的程序设计⼜⽀持⾯向过程的程序设计的混合型语⾔D. ⾮结构化的程序设计语⾔2、⾯向对象程序设计思想的主要特征中不包括( D )。
A. 封装性B. 多态性C. 继承性D. 功能分解,逐步求精3、若定义:string str; 当语句cin>>str; 执⾏时,从键盘输⼊:Microsoft Visual Studio 6.0!所得的结果是str=( B )。
A. Microsoft Visual Studio 6.0!B. MicrosoftC. Microsoft VisualD. Microsoft Visual Studio 6.04、考虑下⾯的函数原型声明:void testDefaulParam(int a,int b=7,char z='*'); 下⾯函数调⽤中,不合法的是( C )。
A. testDefaulParam(5);B. testDefaulParam(5,8);C. testDefaulParam(5,'#');D. testDefaulParam(0,0,'*');5、下列语句中,将函数int sum(int x, int y)正确重载的是( C )。
A. float sum(int x, int y);D. double sum(int y, int x);6、下列表⽰引⽤的⽅法中,( A )是正确的。
已知:int a=1000;A. int &x=a;B. char &yC. int &z=1000;D. float &t=&a7、在⼀个函数中,要求通过函数来实现⼀种不太复杂的功能,并且要求加快执⾏速度,选⽤( A )。
《面向对象程序设计》期末考核试题样例及解答.doc
《面向对象程序设计》期末查核试题样例及解答一、单项选择(每题 1分,12小题,共12分)C++源程序言件的缺省扩展名为()。
A.cppB.exeC.objD.lik2.x>0||y==5 的相反表达式为()。
A.x<=0||y!=5B.x<=0&&y!=5C.x>0||y!=5D.x>0&&y==53. 在下边的字符数组定义中,有语法错误的选项是( )。
A.chara[20]= “abcdefg”;B.chara[]=“x+y=55.”;C.chara[15];D.chara[10]= ’5’;以下正确的函数原型语句是()。
doublefun(intx,inty)doublefun(intx;inty)doublefun(int,int);doublefun(intx,y);5. 在下边储存类中,()的对象不是局部变量。
A. 外面静态类B. 自动类C. 函数形参D. 寄存器类6. 假设有“structBOOK{chartitle[40];floatprice;};BOOK*book=newBOOK;”,则正确的语句是()。
A.strcpy(book->title, ”WangTao”);B.strcpy(book.title,”WangTao”);C. strcpy(*book.title, ”WangTao”);D.strcpy((*book)->title, ”WangTao”);7. 软件产品所拥有的所有或部分地再用于新的应用的能力称为该软件的()。
A. 可保护性B. 可复用性C. 兼容性D. 正确性8. 在多文件结构的程序中,往常把含有main()函数的文件称为()。
A. 主文件B. 实现文件C. 程序言件D. 头文件9. 在一个用链表实现的行列类中,假设每个结点包括的值域用elem表示,包括的指针域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail 表示,若链队为空,则进行插入时一定把新结点的地点赋给 ( ) 。
面向对象程序设计C++期末试卷2套(含答案)
面向对象程序设计C++ 第一套试卷一、选择题(共32分,每小题2分)1.按照C++标识符的规则,下面( B )是c++的标识符。
A.8_afrB.a_ideC.t-axyD._3?d2.C++中声明常量的关键字是( A )A.constB.externC.publicD.enum3.建立( C )的作用是为变量另起一个名字。
A.指针B.枚举C.引用D.结构4.在( D )情况下适宜采用内联函数。
A.函数体含有循环语句B.函数代码多,频繁调用C.函数体含有递归语句D. 函数代码少,频繁调用5.关于new运算符的下列描述中,错误的是( D )A.它可以用来动态创建对象和对象数组B.使用它创建的对象或对象数组可以使用运算符delete删除C.使用它创建对象时要调用构造函数D.使用它创建对象数组时必须指定初始值6.类成员的访问权限中,( C )只能被本类的成员函数和其友元函数访问。
A.shareB.publicC.privateD.protected7.在下面有关构造函数的描述中,正确的是( B )A.构造函数可以带有返回值B.构造函数名字与类名完全相同C.构造函数必须带参数D.构造函数必须定义,不能默认8.有如下类声明:class A{ private: int x;public: A(int n){ x=n;} };class B: public A{ private: int y;public: B(int a,int b); };在构造函数B的下列定义中,正确的是( C )。
A. B::B(int a,int b): x(a),y(b){ }B. B::B(int a,int b): x(a),B(b){ }C. B::B(int a,int b): A(a),y(b){ }D. B::B(int a,int b): A(a),B(b){ }9.设置虚基类的目的是( B )A.简化程序B.消除二义性C.提高运行效率D.减少目标代码10.当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的( C )A.public成员B. protected成员C.private成员D.友元11. 应在下列程序划线处填入的正确语句是( D )#include<iostream>using namespace std;class Base{ public: void fun(){cout<<"Base::fun"<<endl;}};class Derived:public Base{ public: void fun() {cout<<"Derived::fun"<<endl;}};void main(){ Derived obj;_____________ //调用基类的fun函数}A.obj.fun(); B. Base.fun(); C. Base->fun(); D. obj.Base::fun();12. 假定一个类的构造函数为B(int x,int y){a=x;b=a*y;},则执行B obj(3,5); 语句后,obj.a和obj.b的值分别为( C )A.3和5 B.5和3 C.3和15 D.20和513.模板的使用是为了( A )A.提高代码的可重用性B.提高代码的运行效率C.加强类的封装性D.实现多态性14.在下列选项中( A )不是ostream类的对象。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、判断(共10分每题2分)
()1、消息是在面向对象程序设计中用来描述对象之间通信的机制。
()2、程序设计语言中只要提供了类机制,就是面向对象的程序设计语言。
()3、构造函数和析构函数都可以重载,因为它们都是成员函数。
()4、在C++中,只能重载已有的运算符。
()5、函数的参数和返回值类型可以是简单数据类型,也可以是指针、引用、数组和类。
二、选择(共20分每题4分)
1、关于对象的描述中,_____是错误的。
A)一个类可以定义多个对象、指向对象的指针和对象数组
B)对象的成员表示与C语言中结构变量的成员表示相同
C)同一个类创建的若干个对象的数据结构和其内容都是不相同的
D)一个对象在定义时就被初始化
2、使用_____ 可以节省运行时间,但却增加了目标程序的长度。
A)构造函数B)析构函数C)类型转换函数D)内置函数
3、引入友元的主要目的是为了_____。
A)增强数据安全性B)提高程序的可靠性
C)提高程序的效率和灵活性D)保证类的封装性
4、如果表达式a+b中的“+”是作为成员函数重载的运算符,若采用运算符函数调用格式,
则可表示为_____。
A)a.operator+(b) B)b.operator+(a) C)operator+(a,b) D)operator(a+b)
5、在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是_____。
A)作为友元函数重载的1元运算符B)作为成员函数重载的1元运算符
C)作为友元函数重载的2元运算符D)作为成员函数重载的2元运算符
三、写出下列程序的运行结果(共30分每题15分)
1、#include <iostream> int Test :: n=1;
using namespace std; int main()
class Test { Test *p=new Test;
{ public: delete p;
Test( ) {n + = 2;} cout<<"n="<< Test::getNum()<<endl;
~Test( ) {n - = 3;} return 0;
static int getNum(){return n;} }
private: 运行结果:
static int n;
};
2、
#include <iostream> int Box::volume()
using namespace std; { return(height*width*length);
class Box }
{ public:
Box(int,int,int); int main()
int volume(); {
private: Box box1(10,25,20);
int height; cout<<"box1 is "<<box1.volume()<<endl;
int width; Box box2(15,20,11);
int length; cout<<"box2 is "<<box2.volume()<<endl; }; return 0;
Box::Box(int h,int w,int len) }
{ height=h; 运行结果:
width=w;
length=len; }
四、设计程序(共40分)
1)说明并定义一个长方形类CRectangle。
其数据成员定义为私有,包括左下角点坐标x,y;x方向长度a与y方向长度b。
定义公有成员函数作为CRectangle的外部接口,包括输入或修改长方形的坐标;输出该长方形坐标、长宽,周长与面积等若干个。
必须包括以下函数:
①带参数的构造函数:实现在对象的创建时完成长方形坐标与尺寸的初始化。
②析构函数:使对象在被构造和析构时向用户发出相应提示信息。
③length()函数:计算长方形周长。
④area( )函数:计算长方形面积。
⑤求长方形重心与原点(0,0)距离的函数distance( ):将该函数声明为类CRectangle的友
元函数,通过调用该函数计算长方形类的对象的重心与原点距离。
⑥重载运算符“<<”的函数:能输出CRectangle类对象的信息。
2)创建CRectangle的对象rect,左下角点(200,150),a=2000,b=800。
调用类的成员函数或友元函数求该矩形周长、面积、矩形重心与原点距离。
答案
一、判断(共10分每题2分)1√ 2×3×4√5×
二、选择(共20分每题4分)1C 2D 3C 4A 5B
三、写出下列程序的运行结果(共30分每题15分)
1、2、
n=0 box1 is 5000
box2 is 3300
四、设计程序(共40分)
[源程序]
#include <iostream.h> //不带.h的头文件不支持运算符重载,所以不能使用命名空间
#include <math.h>
class CRectangle………………………………………………………………………………3分{public:
CRectangle(double x1,double y1,double a1,double b1 );
~CRectangle( );
double length() const {return 2*(a+b);} ………………….………………………………5分double area() const {return a*b;} …………………………………………………………5分void set_xy(double xx,double yy){x=xx;y=yy;} //修改坐标
friend double distance(const CRectangle &); //加不加const都可以
friend ostream& operator <<(ostream &, CRectangle &);
private:
double x,y,a,b;
};
CRectangle::CRectangle(double x1,double y1,double a1,double b1) ...………………………5分{x=x1; y=y1; a=a1; b=b1;}
CRectangle::~CRectangle()....................................................…………………………………2分{cout<<"Destructor called."<<endl;}
double distance(const CRectangle &r2) …………………….…………………………………5分{double d,xx,yy;
xx=r2.x+r2.a/2;yy=r2.y+r2.b/2; //注意:用r2.x等
d=sqrt(xx*xx+yy*yy);
return d;
}
ostream& operator <<(ostream &output, CRectangle &r) …………………………..…………5分{output<<"("<<r.x<<","<<r.y<<"),a="<<r.a<<",b="<<r.b;
return output;
}
int main()
{ CRectangle rect(200,150,2000,800); //创建对象……….…………………………………2分cout<<"长方形左下角点及两边长度为:"<<rect<<endl; …………………………………2分cout<<"周长为:"<<rect.length()<<endl; ………………..…………………………………2分cout<<"面积为:"<<rect.area()<<endl; …………………….………………………………2分cout<<"重心与原点的距离为:"<<distance(rect)<<endl; …………………………………2分
//注意:对象rect在distance()中的位置
return 0;
}。