上海大学 C++ 2011 ~ 2012 学年 冬 联系客服

发布时间 : 星期二 文章上海大学 C++ 2011 ~ 2012 学年 冬更新完毕开始阅读22b349085022aaea998f0fd2

上海大学 2011 ~ 2012 学年 冬 季学期试卷A

课程名: 面向对象程序设计A 课程号:09366046学分: 5

一. 选择 (18分, 其中 1-7每小题2分, 8-11每小题1分)

1. [ ](多选)C++语言编程的优势是

A.是一种面向对象的语言,而生成的代码运行时开销小。 B.是一种面向过程的语言,用自顶向下设计方法进行设计。 C.易学易用,比用VB,Delphi,java语言编程容易些。 D.是强大的专业级的编程语言,最适合开发系统级软件。

2. [ ] 以下表述错误的是:

A. 面向对象的程序设计工作包括通用算法、类、消息、类之间关联、组件等设计。 B.C++语言中类和对象是完全相同的概念。

C.封装意味着对象内部是如何工作的对客户端来说是不可见的。 D.多态性成员函数意味着其虚函数调用的入口地址是运行期绑定。

E. 面向对象的编程,要执行一个任务有两种方式:客户/服务器模式和委托/事件模式。 F. Windows编程是一种事件机制的编程。

3. [ ]名空间的用途是

A.防止标识符冲突,提供标识符的组织方式 B.表达标识符间的继承关系 C.表示变量

4. [ ](多选)要设计一个汽车制造调度系统,好的做法是:

A.构建Name类, Automobile类,BuildEngine类,Machine类,Work类。 B.构建Automobile类,Engine类,PaintMachine类,Machine类,Worker类。 C.Automobile类含有Engine类型的成员变量。 D.Machine类作为PaintMachine类的基类。 E.Worker类作为Name类的派生类。

5. [ ](多选)以下代码错误的是:

A. void func( int &c); B. int a; int &c=a; C. int &func(); D. int a; int &c; E. virtual void h();

6. [ ](多选) 已有以下定义, 为派生类CD定义构造函数,正确的实现代码是: class CB {….public:CB();CB( string );CB( const Base&);protected:string _name;}; class CD: public CB{ ... };

A. CD::CD(){ CB();} B.CD:: CD( string s):CB(s){} C. CD:: CD(){ } D. CD:: CD(const CB& b):CB(b){}

7. [ ] (多选)有以下定义,结果为true的表达式是 class CB {virtual void m(){…}}; class CD : public CB{ }; CB *pb=new CD; CD *pd=(CD*) pb; A. typeid( pb) == typeid (pd) B. typeid( pb) == typeid (CB *) C. typeid( pb) == typeid (CD *) D. typeid( *pb) == typeid (CB) E. typeid( *pd) == typeid (CD ) F. typeid( pd) == typeid (CB *)

8. [ ]重载操作符>>从输入流中读取数据到CMy类型的对象中正确的设计是:

A. istream & operator>>( istream &in, CMy & obj); B. istream & operator>>( istream in, CMy obj);

C.istream & operator>>( istream& in, CMy obj); D.istream operator>>( istream in, CMy obj);

9. [ ] 从键盘输入数据到变量x,应用标准C++库编程,正确的是: A. cout>>x ; B. std:cin<>x; D. using namespace std; cin<

10. [ ] 设计一个函数,功能是使调用者的两整型变量数据交换,其函数原型应该是:

A. void swap(int a,int b); B. void swap( &int x,&int y); C. int swap(int a); D. void swap(int &a,int &b);

11. [ ] 动态分配n个整数的内存空间,C++编程方法是: A.int *p=new int[n*sizeof(int)]; B.int a[ ]=new int[n]; C.int *p=new int[n]; D.int a[n];

二. 填空 ((27分,其中每小题1分)

1. 面向对象程序设计语言的主要特征是_______________________________________ 2. 函数参数的设计其数据传递有三种方式,分别是传__2.1___、传___2.2___、传___2.3_____ 3. 修改下面代码的错误第___3.1___行代码改写为_____3.2______ int & db1( int i ) //1 { int j = 2*i; //2 return j ; //3 }

4. 设计一个函数encode,功能是对字符串加密,你设计的函数原型(接口)是:___4.1_____________

其中相关参数和返回的说明:________4.2_______________

5. 已有定义:

class BC{ public:int b; } }; class DC : public BC { public: int d; }; BC *pb=new DC;

所创建的DC对象有___5.1__个成员变量,现要对其中成员变量d赋值为1,代码是____5.2_____

6. 设计一个两个开关都能任意控制一个楼道电灯的监控器Windows应用程序,样例如下图界面。完成你的解决方案(注: 可随意用英文中文表述):

系统采用Visual Studio C++开发平台的什么项目类型框架编程______6.1__。

界面显示的对话框从____6.2___类派生,它包含两个逻辑开关,一个逻辑电灯,在什么地方初始化它们:_______6.3______

逻辑开关类,包含那些含义的成员变量怎么关联逻辑电灯: _____6.4______, 包含那些含义的成员函数:______6.5_______

逻辑电灯类,怎么关联电灯图标:____6.6___________ 包含那些意义的成员函数:______6.7_____________

对话框中订阅什么事件来操作(调用)逻辑开关的push函数:_____6.8__

7. 实现下面的类 class CPerson {

protected: string name; public: void setname( string name ) { _____7.1___ =name;} string getname(){ return name;} };

class CWorker : ________7.2____________ { double score; public: ______7.3_____(){} //构造函数 ______7.4____{ setname( name ) ;} //构造函数 ______7.5____ {} //析构函数 int compareScore( CWorker &worker) { if( this->score < worker.getscore ()) return -1; else if( _____________7.6_____________ ) return 1; else return 0; } double getscore(){ return score;} void setscore( double score ) { this->score=score;} };

改写getscore成员函数为外联式实现 _______7.7______________________________ 改写setscore成员函数为外联式实现 ____________7.8_______________________

8. 填空使下述代码显示D::m #include class B {public:

________________ };

class D : public B {public: void m( ) { cout<<”D::m()”<

};

void main( ) { D d1; B *p= &d1; p->m(); }

三. 阅读程序 ( 15分,每小题3分 )

1. 写出输出结果:_____________________________ class Container { enum{ MaxSize = 5 }; int array[ MaxSize ]; int n; public: Container(){ n=0;} void append( int a) { if( n < MaxSize ) { array[ n ] =a; n++; } else throw \越界\ } };

2. 写出输出结果:_____________________________

#include #include #include using namespace std; int main(int argc, char * argv[]) { string str=\李伟 10 2000.00\ istringstream istm( str ); string name; int age; double salary; istm>>name>>age>>salary; double r=10; salary +=age*r; ostringstream ostm; ostm <<\姓名\工龄\新工资\ cout<< ostm.str()<

3. 下面的程序,用标号共标记了6个断点,写出程序先后运行到断点的标号序列(写法举例:1,3,3)4, ________________3.1_______

输入数据100 200的运行结果: ____3.2______

class IEventHandle {public:

virtual void OnMouseDown(int x,int y)=0; //1 };

class CRecv : public IEventHandle {public:

virtual void OnMouseDown(int x,int y) {

cout<<\ //2